说明:
A表的记录数都包含在B表,A表数量都小于等于B表。需要:
1:B.数量-A.数量=C.数量
2: 得到B表的全部记录数条件:
where A.定箱编号 = B.定箱编号 and A.产品编码 = B.产品编码数据:A:
定箱编号 产品编码 数量
KM-458 AT346US346-2-1 1
KM-458 P51137-B 2
KM-459 K-T346US-1S346 3
KM-459 K-T346US-2S346 1
KM-459 P51137-B 1

B:
定箱编号 产品编码 数量
KM-458 AT346US346-2-1 3
KM-458 P51137-B 6
KM-458 P51138-H 3
KM-459 K-T346US-1S346 8
KM-459 K-T346US-2S346 6
KM-459 P51137-B 4
KM-459 P51138-H 6

C:
定箱编号 产品编码 数量
KM-458 AT346US346-2-1 2
KM-458 P51137-B 4
KM-458 P51138-H 3
KM-459 K-T346US-1S346 5
KM-459 K-T346US-2S346 5
KM-459 P51137-B 3
KM-459 P51138-H 6

解决方案 »

  1.   


    update C表 set 数量=B.数量-A.数量 from A表 A,B表 B where A.定箱编号 = B.定箱编号 and A.产品编码 = B.产品编码 
      

  2.   


    select b.定箱编号,b.产品编码 数量=b.数量-a.数量
        from A right join B on a.定箱编号=b.定箱编号 and a.产品编码=b.产品编码  
      

  3.   

    SELECT B.定箱编号,B.产品编码,数量=B.数量-A.数量
    FROM A RIGHT JOIN B
    ON A.定箱编号 = B.定箱编号 and A.产品编码 = B.产品编码 
      

  4.   

    SELECT B.定箱编号,B.产品编码,数量=B.数量-isnull(A.数量,0)
    FROM A RIGHT JOIN B
    ON A.定箱编号 = B.定箱编号 and A.产品编码 = B.产品编码 
      

  5.   

    declare @table1 table
    (
    CaseID varchar(10)
    ,ProductID varchar(20)
    ,Amount int
    );
    declare @table2 table
    (
    CaseID varchar(10)
    ,ProductID varchar(20)
    ,Amount int
    );
    insert into @table1
    values('KM-458','AT346US346-2-1',1),
    ('KM-458','P51137-B',2),
    ('KM-459','K-T346US-1S346',3),
    ('KM-459','K-T346US-2S346',1),
    ('KM-459','P51137-B',1);
    insert into @table2
    values('KM-458','AT346US346-2-1',3),
    ('KM-458','P51137-B',6),
    ('KM-458','P51138-H',3),
    ('KM-459','K-T346US-1S346',8),
    ('KM-459','K-T346US-2S346',6),
    ('KM-459','P51137-B',4),
    ('KM-459','P51138-H',6);select  t2.CaseID
        ,t2.ProductID
        ,t2.Amount-isnull(t1.Amount,0)
    from @table1  t1
     right join @table2 t2
     on t1.ProductID=t2.ProductID and t1.CaseID=t2.CaseID 
    order by t2.CaseID,t2.ProductID