使用full join,例如:
select isnull(a.id , b.id) id , isnull(a.val , b.val) val from 
a full join b on a.id = b.id
具体的列名,自己更改.

解决方案 »

  1.   

    多笔交货对应一笔发票、多笔交货对应一笔回款
    这个需求可以再做完full join以后用where来判断,只去想要的记录
      

  2.   


    对合并后的数据存表进一步处理.--生成测试数据(合并后的数据)           
    select '2008.01.01' 交货日期,20 交货单号,11101 产品编号,100 交货数量,4 交货价格,400 交货总计,
    771 回款单号,'2008.01.29' 回款日期,50 收款数量,4 收款单价,200 收款总计 into #t
    union all select '2008.01.01',20,11101,100,4,400,772,'2008.01.29',50,4,200 
    union all select '2008.01.01',22,11101,100,4,400,772,'2008.01.29',50,4,200 
    union all select '2008.01.01',21,11101,100,4,400,772,'2008.01.29',50,4,200 
    union all select '2008.01.01',22,11101,100,4,400,772,'2008.01.29',50,4,200 --生成排序过渡表
    select * into #t1 from #t order by 交货单号 --数据处理
    declare @交货单号 varchar(10)
    declare @交货数量 varchar(10)
    declare @交货价格 varchar(10)
    declare @交货总计 varchar(10)
    set @交货单号=''
    update #t1 set @交货数量=case when @交货单号=交货单号 then '' else 交货数量 end,
      @交货价格=case when @交货单号=交货单号 then '' else 交货价格 end,
      @交货总计=case when @交货单号=交货单号 then '' else 交货总计 end,
      @交货单号=交货单号,
      交货数量= @交货数量,
      交货价格= @交货价格,
      交货总计= @交货总计

    select * from #t1
    /*结果
    交货日期 交货单号 产品编号 交货数量 交货价格 交货总计 回款单号 回款日期 收款数量 收款单价 收款总计
    2008.01.01 20 11101 100 4 400 771 2008.01.29 50 4 200
    2008.01.01 20 11101 0 0 0 772 2008.01.29 50 4 200
    2008.01.01 21 11101 100 4 400 772 2008.01.29 50 4 200
    2008.01.01 22 11101 100 4 400 772 2008.01.29 50 4 200
    2008.01.01 22 11101 0 0 0 772 2008.01.29 50 4 200*/