表A: 
交货日期  交货单号  产品编号  交货数量  交货价格 交货总计 开票日期      发票号 数量  单价 发票总计 
-------------------------------------------------------------------------------------- 
2008.01.01  20  11101    100      4      400    2008.02.22  null  null null  null 
2008.02.01  23  10301    50      60      3000    2008.02.19  33    50  50  3000 
2008.02.01  25  10501    600      4      2400    2008.02.19  32    600  3.5  2400 
2008.02.01  30  10302    100      75      7500    null        null  null  null  null 
2008.02.01  31  10401    900      4      3600    2008.02.19  53    600  4    2400 
2008.02.01  31  10401    900      4      360    2008.02.29  54    300  4    1200 
2008.02.01  33  10202    100      12      1200    2008.02.19  28    100  26  2600 
2008.02.01  35  10201    100      15      1200    2008.02.01  null  null null null 表B: 
交货日期  交货单号  产品编号  交货数量  交货价格 交货总计 回款单号    回款日期  收款数量  回款单价 收款总计 
2008.01.01  20    11101  100      4      400    771    2008.01.29  50      4      200 
2008.01.01  20    11101  100      4      400    772    2008.01.30  50      4      200 
2008.02.01  23    10301  50       60     3000    
2008.02.01  25    10501  600      4      2400 
2008.02.01  30    10302  100      75     7500 
2008.02.01  31    10401  600      4      2400 
2008.02.01  39    10302  50       70     3500 要求实现:
(请注意在2008.01.01只交货一次,而对应他的亏款却是2次收完的,
如此还有2008.02.01也是指教活一次,而他的发票却是分2次开完的)
交货日期  交货单号  产品编号  交货数量  交货价格 交货总计 开票日期  发票号 数量  单价 发票总计  数量 单价 发票总计 回款单号 汇款日期 收款数量  回款单价 收款总计
---------------------------------------------------------------------------------------------------- 
2008.01.01  20  11101    100   4      400  null  null  null  null null  771  2008.01.29  50  4  200 
----------------------------------------------------------------------------------------------------
2008.01.01  20  11101    null  null   null  null  null  null  null null  771  2008.01.29  50  4  200 
----------------------------------------------------------------------------------------------------
2008.02.01  23  10301    50    60 3000  2008.02.19  33  50  50  3000  null  null  null  null  null 
----------------------------------------------------------------------------------------------------
2008.02.01  25  10501    600   4  2400  2008.02.19  32  600  3.5  2400  null  null  null  null  null 
-----------------------------------------------------------------------------------------------------
2008.02.01  30  10302    100   75 7500  2008.02.29  null  null  null  null  null null  null  null null
-----------------------------------------------------------------------------------------------------
2008.02.01  31  10401    900   4  3600  2008.02.19   53  600  4  2400  null  null  null  null  null 
-----------------------------------------------------------------------------------------------------
2008.02.01  31  10401    null  null null 2008.02.29  54  300  4  1200  null  null  null  null  null
----------------------------------------------------------------------------------------------------
2008.02.01  33  10202    100   26  2600  2008.02.19  28  100  26  2600 null  null  null  null  null 
------------------------------------------------------------------------------------------------------
2008.02.01  35  10201    100   12  1200  null  null  null  null  null  null  null  null  null  null 
----------------------------------------------------------------------------------------------------
2008.02.01  39  10302    50    70  3500  null  null  null  null  null  null  null  null  null  null 我用全连接,发货数在2008.01.01变成了发200个,事实上只发了100个。
请教高手给帮忙,谢谢了~~~

解决方案 »

  1.   

    表B b
    where 条件加上
     b.回款单号=(select min(回款单号) from 表B where 交货单号=b.交货单号)
      

  2.   

    我写的,但是不对select  distinct isnull(a.交货日期,b.交货日期) as 交货日期,
      isnull(a.交货单号,b.交货单号) as 交货单号,
      isnull(a.产品编号,b.产品编号) as 产品编号,
      isnull(a.交货数量,b.交货数量) as 交货数量,
      isnull(a.交货价格,b.交货价格) as 交货价格,
      isnull(a.交货总计,b.交货总计) as 交货总计,
      a.开票日期,
      a.发票号,
      a.数量,
      a.单价,
      a.发票总计,
      b.回款单号,
      b.回款日期,
      b.收款数量,
      b.收款单价,
      b.收款总计
    from  A
    full outer join  B 
    on  a.交货单号=b.交货单号   and  a.产品编号=b.产品编号
      

  3.   


    //有点乱,慢慢看
    ----1
    select  distinct 
      id=identity(int,1,1),
      isnull(a.交货日期,b.交货日期) as 交货日期,
      isnull(a.交货单号,b.交货单号) as 交货单号,
      isnull(a.产品编号,b.产品编号) as 产品编号,
      isnull(a.交货数量,b.交货数量) as 交货数量,
      isnull(a.交货价格,b.交货价格) as 交货价格,
      isnull(a.交货总计,b.交货总计) as 交货总计,
      a.开票日期,
      a.发票号,
      a.数量,
      a.单价,
      a.发票总计,
      b.回款单号,
      b.回款日期,
      b.收款数量,
      b.收款单价,
      b.收款总计
    into E
    from  A
    full outer join  B 
    on  a.交货单号=b.交货单号   and  a.产品编号=b.产品编号---2
    select id=identity(int,1,1),* into C
    from 
    (select
      isnull(a.交货单号,b.交货单号) as 交货单号,
      isnull(a.产品编号,b.产品编号) as 产品编号,
      isnull(a.交货数量,b.交货数量) as 交货数量,
      isnull(a.交货价格,b.交货价格) as 交货价格,
      isnull(a.交货总计,b.交货总计) as 交货总计
      from  A
      full outer join  B 
      on   a.产品编号=b.产品编号 and a.交货单号=b.交货单号
    ) t
    select min(id) as id,产品编号 , 交货数量  ,交货价格, 交货总计 
    into D
    from c 
    group by 产品编号 , 交货数量  ,交货价格, 交货总计
    order by min(id)
    ----3select e.交货日期,e.交货单号,d.产品编号,d.交货数量,d.交货价格,d.交货总计,e.开票日期,e.数量,e.单价,e.发票总计,
           e.回款单号,e.回款日期,e.收款数量,e.收款单价,e.收款总计
    from e
    left outer join d
    on e.id=d.id