有三个表:
select 外销发票号,核销单号,报关金额 from baoguan
select 收汇日,收汇金额,汇率,结汇 from shoukuan
select 付款日,已付金额 from fukuan外销发票号    核销单号   报关金额  收汇日      收汇金额  汇率    结汇      付款日      已付金额
126HFGY10001  715890166  17228.16  2010-01-22  10879.38  6.8132  74123.39  2010-05-22  10000
126HFGY10001  715890166  17228.16  2007-02-22  6323      6.8258  43159.53  2010-06-22  879.38
126HFGY10001  715890166  17228.16                                          2010-07-22  6323想得到如下显示:外销发票号    核销单号   报关金额  收汇日      收汇金额  汇率    结汇      付款日      已付金额
126HFGY10001  715890166  17228.16  2010-01-22  10879.38  6.8132  74123.39  2010-05-22  10000
                                   2007-02-22  6323      6.8258  43159.53  2010-06-22  879.38
                                                                           2010-07-22  6323

解决方案 »

  1.   

    原本是这样的外销发票号      核销单号    报关金额  收汇日      收汇金额   汇率    结汇      付款日    已付金额
    126HFGY10001  715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39 2010-05-22 10000
    126HFGY10001  715890166 17228.16 2007-02-22 6323     6.8258 43159.53 2010-06-22879.38
    126HFGY10001  715890166 17228.16                                     2010-07-22 6323
      

  2.   


    create table baoguan(外销发票号 varchar(20),核销单号 varchar(20),报关金额 decimal(18,2))
    insert into baoguan values('126HFGY10001', '715890166', 17228.16)
    create table shoukuan(外销发票号 varchar(20),收汇日 datetime,收汇金额 decimal(18,2),汇率 decimal(18,4),结汇 decimal(18,2))
    insert into shoukuan values('126HFGY10001','2010-01-22', 10879.38 ,6.8132 ,74123.39)
    insert into shoukuan values('126HFGY10001','2007-02-22', 6323     ,6.8258 ,43159.53)
    insert into shoukuan values('126HFGY10001','2010-04-02', 4450.4   ,6.8121 ,30316.57)
    go
     
    select case when 收汇日 = (select top 1 收汇日 from shoukuan where 外销发票号 = m.外销发票号 order by 收汇日) then t.外销发票号 else '' end 外销发票号,
           case when 收汇日 = (select top 1 收汇日 from shoukuan where 外销发票号 = m.外销发票号 order by 收汇日) then t.核销单号 else '' end 核销单号,
           case when 收汇日 = (select top 1 收汇日 from shoukuan where 外销发票号 = m.外销发票号 order by 收汇日) then cast(t.报关金额 as varchar) else '' end 报关金额,
           收汇日,收汇金额,汇率,结汇
    from  baoguan t , shoukuan m
    where t.外销发票号 = m.外销发票号
    order by m.收汇日drop table baoguan , shoukuan/*
    外销发票号                核销单号                 报关金额                           收汇日                                                    收汇金额                 汇率                   结汇                   
    -------------------- -------------------- ------------------------------ ------------------------------------------------------ -------------------- -------------------- -------------------- 
    126HFGY10001         715890166            17228.16                       2007-02-22 00:00:00.000                                6323.00              6.8258               43159.53
                                                                             2010-01-22 00:00:00.000                                10879.38             6.8132               74123.39
                                                                             2010-04-02 00:00:00.000                                4450.40              6.8121               30316.57(所影响的行数为 3 行)
    */
      

  3.   

    create table baoguan(外销发票号 varchar(20),核销单号 varchar(20),报关金额 decimal(18,2))
    insert into baoguan values('126HFGY10001', '715890166', 17228.16)
    create table shoukuan(外销发票号 varchar(20),收汇日 datetime,收汇金额 decimal(18,2),汇率 decimal(18,4),结汇 decimal(18,2))
    insert into shoukuan values('126HFGY10001','2010-01-22', 10879.38 ,6.8132 ,74123.39)
    insert into shoukuan values('126HFGY10001','2007-02-22', 6323     ,6.8258 ,43159.53)
    insert into shoukuan values('126HFGY10001','2010-04-02', 4450.4   ,6.8121 ,30316.57)
    create table fukuan(外销发票号 varchar(20),付款日 datetime,已付金额 decimal(18,2))
    insert into fukuan values('126HFGY10001','2010-05-22',10000)
    insert into fukuan values('126HFGY10001','2010-06-22',879.38)
    goselect case when 收汇日 = (select top 1 收汇日 from 
    (
      select t1.*,t2.收汇日,t2.收汇金额,t2.汇率,t2.结汇,t3.付款日,t3.已付金额 from baoguan t1 left join
      (select t.* , px = (select count(1) from shoukuan where 外销发票号 = t.外销发票号 and 收汇日 < t.收汇日) + 1 from shoukuan t) t2 on t1.外销发票号 = t2.外销发票号 left join
      (select t.* , px = (select count(1) from fukuan where 外销发票号 = t.外销发票号 and 付款日 < t.付款日) + 1 from fukuan t) t3 on t1.外销发票号 = t2.外销发票号 and t2.px = t3.px
    ) b1 where b1.外销发票号 = a1.外销发票号 order by b1.收汇日) then a1.外销发票号 else '' end 外销发票号,
           case when 收汇日 = (select top 1 收汇日 from 
    (
      select t1.*,t2.收汇日,t2.收汇金额,t2.汇率,t2.结汇,t3.付款日,t3.已付金额 from baoguan t1 left join
      (select t.* , px = (select count(1) from shoukuan where 外销发票号 = t.外销发票号 and 收汇日 < t.收汇日) + 1 from shoukuan t) t2 on t1.外销发票号 = t2.外销发票号 left join
      (select t.* , px = (select count(1) from fukuan where 外销发票号 = t.外销发票号 and 付款日 < t.付款日) + 1 from fukuan t) t3 on t1.外销发票号 = t2.外销发票号 and t2.px = t3.px
    ) b2 where b2.外销发票号 = a1.外销发票号 order by b2.收汇日) then a1.核销单号 else '' end 核销单号,
           case when 收汇日 = (select top 1 收汇日 from 
    (
      select t1.*,t2.收汇日,t2.收汇金额,t2.汇率,t2.结汇,t3.付款日,t3.已付金额 from baoguan t1 left join
      (select t.* , px = (select count(1) from shoukuan where 外销发票号 = t.外销发票号 and 收汇日 < t.收汇日) + 1 from shoukuan t) t2 on t1.外销发票号 = t2.外销发票号 left join
      (select t.* , px = (select count(1) from fukuan where 外销发票号 = t.外销发票号 and 付款日 < t.付款日) + 1 from fukuan t) t3 on t1.外销发票号 = t2.外销发票号 and t2.px = t3.px
    ) b3 where b3.外销发票号 = a1.外销发票号 order by b3.收汇日) then cast(a1.报关金额 as varchar) else '' end 报关金额,
           收汇日,收汇金额,汇率,结汇,isnull(convert(varchar(10),付款日,120),''),isnull(cast(已付金额 as varchar),'')
    from

      select t1.*,t2.收汇日,t2.收汇金额,t2.汇率,t2.结汇,t3.付款日,t3.已付金额 from baoguan t1 left join
      (select t.* , px = (select count(1) from shoukuan where 外销发票号 = t.外销发票号 and 收汇日 < t.收汇日) + 1 from shoukuan t) t2 on t1.外销发票号 = t2.外销发票号 left join
      (select t.* , px = (select count(1) from fukuan where 外销发票号 = t.外销发票号 and 付款日 < t.付款日) + 1 from fukuan t) t3 on t1.外销发票号 = t2.外销发票号 and t2.px = t3.px
    ) a1
    order by a1.收汇日
    drop table baoguan , shoukuan , fukuan/*
    外销发票号                核销单号                 报关金额                           收汇日                                                    收汇金额                 汇率                   结汇                                                             
    -------------------- -------------------- ------------------------------ ------------------------------------------------------ -------------------- -------------------- -------------------- ---------- ------------------------------ 
    126HFGY10001         715890166            17228.16                       2007-02-22 00:00:00.000                                6323.00              6.8258               43159.53             2010-05-22 10000.00
                                                                             2010-01-22 00:00:00.000                                10879.38             6.8132               74123.39             2010-06-22 879.38
                                                                             2010-04-02 00:00:00.000                                4450.40              6.8121               30316.57                        (所影响的行数为 3 行)
    */
      

  4.   

    通过核销单号关联create table baoguan(外销发票号 varchar(20),核销单号 varchar(20),报关金额 decimal(18,2))
    insert into baoguan values('126HFGY10001', '715890166', 17228.16)
    create table shoukuan(外销发票号 varchar(20),收汇日 datetime,收汇金额 decimal(18,2),汇率 decimal(18,4),结汇 decimal(18,2))
    insert into shoukuan values('126HFGY10001','2010-01-22', 10879.38 ,6.8132 ,74123.39)
    insert into shoukuan values('126HFGY10001','2007-02-22', 6323     ,6.8258 ,43159.53)
    create table fukuan (付款日 datetime,已付金额 decimal(18,2))
    insert into fukuan values('2010-05-22', 10000)
    insert into fukuan values('2010-06-22', 879.38)
    insert into fukuan values('2010-07-22', 6323)
    goselect case when 收汇日 = (select top 1 收汇日 from shoukuan where 核销单号 = m.核销单号 order by 收汇日) then t.外销发票号 else '' end 外销发票号,
           case when 收汇日 = (select top 1 收汇日 from shoukuan where 核销单号 = m.核销单号 order by 收汇日) then t.核销单号 else '' end 核销单号,
           case when 收汇日 = (select top 1 收汇日 from shoukuan where 核销单号 = m.核销单号 order by 收汇日) then cast(t.报关金额 as varchar) else '' end 报关金额,
           收汇日,收汇金额,汇率,结汇,null 付款日,null 已付金额
    from  baoguan t , shoukuan m
    where t.核销单号 = m.核销单号
    order by m.收汇日
    union all
    select case when 付款日 = (select top 1 付款日 from shoukuan where 核销单号 = m.核销单号 order by 付款日) then t.外销发票号 else '' end 外销发票号,
           case when 付款日 = (select top 1 付款日 from shoukuan where 核销单号 = m.核销单号 order by 付款日) then t.核销单号 else '' end 核销单号,
           case when 付款日 = (select top 1 付款日 from shoukuan where 核销单号 = m.核销单号 order by 付款日) then cast(t.报关金额 as varchar) else '' end 报关金额,
           null 收汇日,null 收汇金额,null 汇率,null 结汇,
           case when m.核销单号=t.核销单号 then m.付款日 end 付款日,
           case when m.核销单号=t.核销单号 then m.已付金额 end 已付金额
    from  baoguan t , fukuan m
    where t.核销单号 = m.核销单号
    order by m.付款日drop table baoguan , shoukuan以上代码运行报错,提示union附近出错……
      

  5.   


    fukuan这个表你通过什么和其他两个表关联
      

  6.   

    create table baoguan(外销发票号 varchar(20),核销单号 varchar(20),报关金额 decimal(18,2))
    insert into baoguan values('126HFGY10001', '715890166', 17228.16)
    create table shoukuan(外销发票号 varchar(20),收汇日 datetime,收汇金额 decimal(18,2),汇率 decimal(18,4),结汇 decimal(18,2))
    insert into shoukuan values('126HFGY10001','2010-01-22', 10879.38 ,6.8132 ,74123.39)
    insert into shoukuan values('126HFGY10001','2007-02-22', 6323     ,6.8258 ,43159.53)
    create table fukuan (付款日 datetime,已付金额 decimal(18,2))
    insert into fukuan values('2010-05-22', 10000)
    insert into fukuan values('2010-06-22', 879.38)
    insert into fukuan values('2010-07-22', 6323)
    go
    select case when a.rn=1 then ltrim(a.外销发票号) else '' end as 外销发票号 
    ,case when a.rn=1 then ltrim(a.核销单号) else '' end as 核销单号
    ,case when a.rn=1 then ltrim(a.报关金额) else '' end as 报关金额
    ,isnull(ltrim(b.收汇日),'') as 收汇日
    ,isnull(ltrim(b.收汇金额),'') as 收汇金额
    ,isnull(ltrim(b.汇率),'') as 汇率
    ,isnull(ltrim(b.结汇),'') as 结汇
    ,a.付款日
    ,a.已付金额
    from
    (select ROW_NUMBER()over(order by getdate()) as rn,* from baoguan,fukuan)a
    left join 
    (select ROW_NUMBER()over(order by getdate()) as rn,t2.*,t1.报关金额,t1.核销单号 from baoguan t1,shoukuan t2) b 
    on a.外销发票号=b.外销发票号 and a.rn=b.rn/*
    外销发票号 核销单号 报关金额 收汇日 收汇金额 汇率 结汇 付款日 已付金额
    126HFGY10001 715890166 17228.16 01 22 2010 12:00AM 10879.38 6.8132 74123.39 2010-05-22 00:00:00.000 10000.00
    02 22 2007 12:00AM 6323.00 6.8258 43159.53 2010-06-22 00:00:00.000 879.38
    2010-07-22 00:00:00.000 6323.00
    */
      

  7.   

    select 外销发票号,核销单号,报关金额 from baoguan
    select 核销单号,收汇日,收汇金额,汇率,结汇 from shoukuan
    select 核销单号,付款日,已付金额 from fukuan通过核销单号关联
      

  8.   

    sql 2000不支持Row_Number 函数
      

  9.   

    有三个表通过核销单号关联:
    select 外销发票号,核销单号,报关金额 from baoguan
    select 核销单号,收汇日,收汇金额,汇率,结汇 from shoukuan
    select 核销单号,付款日,已付金额 from fukuan外销发票号     核销单号    报关金额  收汇日      收汇金额   汇率    结汇      付款日     已付金额
    126HFGY10001 715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39 2010-05-22 10000
    126HFGY10001 715890166 17228.16 2007-02-22 6323     6.8258 43159.53 2010-06-22 879.38
    126HFGY10001 715890166 17228.16                                     2010-07-22 6323
    126HFGY10002 715911629 6372     2010-02-11 1901.6   6.8258 12955.98 2010-05-25 32955
    126HFGY10002 715911629 6372     2010-04-02 4450.4   6.8258 30316.57 2010-06-25 10000
    126HFGY10002 715911629 6372                                         2010-06-25 317.55想得到如下显示:外销发票号     核销单号    报关金额  收汇日      收汇金额   汇率    结汇      付款日     已付金额
    126HFGY10001 715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39 2010-05-22 10000
                                    2007-02-22 6323     6.8258 43159.53 2010-06-22 879.38
                                                                        2010-07-22 6323
    126HFGY10002 715911629 6372     2010-02-11 1901.6   6.8258 12955.98 2010-05-25 32955
                                    2010-04-02 4450.4   6.8258 30316.57 2010-06-25 10000
                                                                        2010-06-25 317.55
      

  10.   

    麻烦高手们再帮我看看
    有三个表通过核销单号关联:
    select 外销发票号,核销单号,报关金额 from baoguan
    select 核销单号,收汇日,收汇金额,汇率,结汇 from shoukuan
    select 核销单号,付款日,已付金额 from fukuan
    外销发票号     核销单号    报关金额  收汇日      收汇金额   汇率    结汇      付款日     已付金额
    126HFGY10001 715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39 2010-05-22 10000
                                    2007-02-22 6323     6.8258 43159.53 2010-06-22 879.38
                                                                        2010-07-22 6323
    126HFGY10002 715911629 6372     2010-02-11 1901.6   6.8258 12955.98 2010-05-25 32955
                                    2010-04-02 4450.4   6.8258 30316.57 2010-06-25 10000
                                                                        2010-06-25 317.55
      

  11.   

    把union all前面的order by 去掉就行 了!
    select case when 收汇日 = (select top 1 收汇日 from shoukuan where 核销单号 = m.核销单号 order by 收汇日) then t.外销发票号 else '' end 外销发票号,
           case when 收汇日 = (select top 1 收汇日 from shoukuan where 核销单号 = m.核销单号 order by 收汇日) then t.核销单号 else '' end 核销单号,
           case when 收汇日 = (select top 1 收汇日 from shoukuan where 核销单号 = m.核销单号 order by 收汇日) then cast(t.报关金额 as varchar) else '' end 报关金额,
           收汇日,收汇金额,汇率,结汇,null 付款日,null 已付金额
    from  baoguan t , shoukuan m
    where t.核销单号 = m.核销单号
    --order by m.收汇日
    union all
    select case when 付款日 = (select top 1 付款日 from shoukuan where 核销单号 = m.核销单号 order by 付款日) then t.外销发票号 else '' end 外销发票号,
           case when 付款日 = (select top 1 付款日 from shoukuan where 核销单号 = m.核销单号 order by 付款日) then t.核销单号 else '' end 核销单号,
           case when 付款日 = (select top 1 付款日 from shoukuan where 核销单号 = m.核销单号 order by 付款日) then cast(t.报关金额 as varchar) else '' end 报关金额,
           null 收汇日,null 收汇金额,null 汇率,null 结汇,
           case when m.核销单号=t.核销单号 then m.付款日 end 付款日,
           case when m.核销单号=t.核销单号 then m.已付金额 end 已付金额
    from  baoguan t , fukuan m
    where t.核销单号 = m.核销单号
    order by m.付款日
      

  12.   

    我想通过不同核销单号得到这样的结果:外销发票号     核销单号    报关金额  收汇日      收汇金额   汇率    结汇      付款日     已付金额
    126HFGY10001 715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39 2010-05-22 10000
                                    2007-02-22 6323     6.8258 43159.53 2010-06-22 879.38
                                                                        2010-07-22 6323
    126HFGY10002 715911629 6372     2010-02-11 1901.6   6.8258 12955.98 2010-05-25 110955
                                    2010-04-02 4450.4   6.8258 30316.57 2010-06-25 258.55
                                    2010-06-25 10000    6.8258 68258    
      

  13.   

    先谢谢啦,但是你那个只是对了一半,如果收款大于付款的记录的话可以的,但是我想得到如下的结果,能再帮我看看吗?我想通过不同核销单号得到这样的结果:外销发票号     核销单号    报关金额  收汇日      收汇金额   汇率    结汇      付款日     已付金额
    126HFGY10001 715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39 2010-05-22 10000
                                    2007-02-22 6323     6.8258 43159.53 2010-06-22 879.38
                                                                        2010-07-22 6323
    126HFGY10002 715911629 6372     2010-02-11 1901.6   6.8258 12955.98 2010-05-25 110955
                                    2010-04-02 4450.4   6.8258 30316.57 2010-06-25 258.55
                                    2010-06-25 10000    6.8258 68258    
      

  14.   

    爱新觉罗.毓华,在帮我看看哈~
    通过不同核销单号得到这样的结果外销发票号     核销单号    报关金额  收汇日      收汇金额   汇率    结汇      付款日     已付金额
    126HFGY10001 715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39 2010-05-22 10000
                                    2007-02-22 6323     6.8258 43159.53 2010-06-22 879.38
                                                                        2010-07-22 6323
    126HFGY10002 715911629 6372     2010-02-11 1901.6   6.8258 12955.98 2010-05-25 110955
                                    2010-04-02 4450.4   6.8258 30316.57 2010-06-25 258.55
                                    2010-06-25 10000    6.8258 68258 
      

  15.   


    create table baoguan(外销发票号 varchar(20),核销单号 varchar(20),报关金额 decimal(18,2))
    insert into baoguan values('126HFGY10001', '715890166', 17228.16)
    insert into baoguan values('126HFGY10002', '715911629', 6372)
    create table shoukuan(核销单号 varchar(20),收汇日 datetime,收汇金额 decimal(18,2),汇率 decimal(18,4),结汇 decimal(18,2))
    insert into shoukuan values('715890166','2010-01-22', 10879.38 ,6.8132 ,74123.39)
    insert into shoukuan values('715890166','2007-02-22', 6323     ,6.8258 ,43159.53)
    insert into shoukuan values('715911629','2010-02-11', 1901.6   ,6.8121 ,12955.98)
    insert into shoukuan values('715911629','2010-04-02', 4450.4   ,6.8121 ,30316.57)
    insert into shoukuan values('715911629','2010-06-25', 10000   ,6.8121 ,68258)
    create table fukuan(核销单号 varchar(20),付款日 datetime,已付金额 decimal(18,2))
    insert into fukuan values('715890166','2010-05-22',10000)
    insert into fukuan values('715890166','2010-06-22',879.38)
    insert into fukuan values('715890166','2010-07-22',6323)
    insert into fukuan values('715911629','2010-05-25',110955)
    insert into fukuan values('715911629','2010-06-25',258.55)
    goselect case when 收汇日 = (select top 1 收汇日 from 
    (
      select t1.*,t2.收汇日,t2.收汇金额,t2.汇率,t2.结汇,t3.付款日,t3.已付金额 from baoguan t1 left join
      (select t.* , px = (select count(1) from shoukuan where 核销单号 = t.核销单号 and 收汇日 < t.收汇日) + 1 from shoukuan t) t2 on t1.核销单号 = t2.核销单号 left join
      (select t.* , px = (select count(1) from fukuan where 核销单号 = t.核销单号 and 付款日 < t.付款日) + 1 from fukuan t) t3 on t1.核销单号 = t3.核销单号 and t2.px = t3.px
    ) b1 where b1.核销单号 = a1.核销单号 order by b1.收汇日) then a1.外销发票号 else '' end 外销发票号,
           case when 收汇日 = (select top 1 收汇日 from 
    (
      select t1.*,t2.收汇日,t2.收汇金额,t2.汇率,t2.结汇,t3.付款日,t3.已付金额 from baoguan t1 left join
      (select t.* , px = (select count(1) from shoukuan where 核销单号 = t.核销单号 and 收汇日 < t.收汇日) + 1 from shoukuan t) t2 on t1.核销单号 = t2.核销单号 left join
      (select t.* , px = (select count(1) from fukuan where 核销单号 = t.核销单号 and 付款日 < t.付款日) + 1 from fukuan t) t3 on t1.核销单号 = t3.核销单号 and t2.px = t3.px
    ) b2 where b2.核销单号 = a1.核销单号 order by b2.收汇日) then a1.核销单号 else '' end 核销单号,
           case when 收汇日 = (select top 1 收汇日 from 
    (
      select t1.*,t2.收汇日,t2.收汇金额,t2.汇率,t2.结汇,t3.付款日,t3.已付金额 from baoguan t1 left join
      (select t.* , px = (select count(1) from shoukuan where 核销单号 = t.核销单号 and 收汇日 < t.收汇日) + 1 from shoukuan t) t2 on t1.核销单号 = t2.核销单号 left join
      (select t.* , px = (select count(1) from fukuan where 核销单号 = t.核销单号 and 付款日 < t.付款日) + 1 from fukuan t) t3 on t1.核销单号 = t3.核销单号 and t2.px = t3.px
    ) b3 where b3.核销单号 = a1.核销单号 order by b3.收汇日) then cast(a1.报关金额 as varchar) else '' end 报关金额,
           收汇日,收汇金额,汇率,结汇,isnull(convert(varchar(10),付款日,120),'') 付款日,isnull(cast(已付金额 as varchar),'')已付金额
    from

      select t1.*,t2.收汇日,t2.收汇金额,t2.汇率,t2.结汇,t3.付款日,t3.已付金额 from baoguan t1 left join
      (select t.* , px = (select count(1) from shoukuan where 核销单号 = t.核销单号 and 收汇日 < t.收汇日) + 1 from shoukuan t) t2 on t1.核销单号 = t2.核销单号 left join
      (select t.* , px = (select count(1) from fukuan where 核销单号 = t.核销单号 and 付款日 < t.付款日) + 1 from fukuan t) t3 on t1.核销单号 = t3.核销单号 and t2.px = t3.px
    ) a1
    order by a1.收汇日
    drop table baoguan , shoukuan , fukuan/*
    外销发票号     核销单号    报关金额  收汇日      收汇金额   汇率    结汇      付款日     已付金额
    126HFGY10001 715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39 2010-05-22 10000
                                    2007-02-22 6323     6.8258 43159.53 2010-06-22 879.38
                                                                             126HFGY10002 715911629 6372     2010-02-11 1901.6   6.8258 12955.98 2010-05-25 110955
                                    2010-04-02 4450.4   6.8258 30316.57 2010-06-25 258.55
                                    2010-06-25 10000    6.8258 68258 
    */                                      少了一条记录 2010-07-22 6323
      

  16.   

    create table baoguan(外销发票号 varchar(20),核销单号 varchar(20),报关金额 decimal(18,2))
    insert into baoguan values('126HFGY10001', '715890166', 17228.16)
    create table shoukuan(外销发票号 varchar(20),收汇日 datetime,收汇金额 decimal(18,2),汇率 decimal(18,4),结汇 decimal(18,2))
    insert into shoukuan values('126HFGY10001','2010-01-22', 10879.38 ,6.8132 ,74123.39)
    insert into shoukuan values('126HFGY10001','2007-02-22', 6323     ,6.8258 ,43159.53)
    insert into shoukuan values('126HFGY10001','2010-04-02', 4450.4   ,6.8121 ,30316.57)
    go
     
    select case when 收汇日 = (select top 1 收汇日 from shoukuan where 外销发票号 = m.外销发票号 order by 收汇日) then t.外销发票号 else '' end 外销发票号,
           case when 收汇日 = (select top 1 收汇日 from shoukuan where 外销发票号 = m.外销发票号 order by 收汇日) then t.核销单号 else '' end 核销单号,
           case when 收汇日 = (select top 1 收汇日 from shoukuan where 外销发票号 = m.外销发票号 order by 收汇日) then cast(t.报关金额 as varchar) else '' end 报关金额,
           收汇日,收汇金额,汇率,结汇
    from  baoguan t , shoukuan m
    where t.外销发票号 = m.外销发票号
    order by m.收汇日
      

  17.   

    楼上的,我要的是三张表。
    现在只能得到这种结果外销发票号     核销单号    报关金额  收汇日      收汇金额   汇率    结汇      付款日     已付金额
    126HFGY10001 715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39 2010-05-22 10000
                                    2007-02-22 6323     6.8258 43159.53 2010-06-22 879.38
    126HFGY10002 715911629 6372     2010-02-11 1901.6   6.8258 12955.98 2010-05-25 110955
                                    2010-04-02 4450.4   6.8258 30316.57 2010-06-25 258.55
                                    2010-06-25 10000    6.8258 68258我想得到这种结果外销发票号     核销单号    报关金额  收汇日      收汇金额   汇率    结汇      付款日     已付金额
    126HFGY10001 715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39 2010-05-22 10000
                                    2007-02-22 6323     6.8258 43159.53 2010-06-22 879.38
                                                                        2010-07-22 6323
    126HFGY10002 715911629 6372     2010-02-11 1901.6   6.8258 12955.98 2010-05-25 110955
                                    2010-04-02 4450.4   6.8258 30316.57 2010-06-25 258.55
                                    2010-06-25 10000    6.8258 68258