我的一张库存表
库存表(款号,颜色,尺码,数量,价格,金额)
现在我又一张采购明细表
采购明细表(凭证单号,款号,颜色,尺码,数量,折扣,单价,金额)现在我要点击入库就把采购明细表中的所有的数据批量添加到库存表如果库存表中有这个款号和颜色尺码的就在以前的数量上增加现在新的数量
没有的话就添加一个新的到库存表 如果采购类型是退货就在库存表中减少数据  求高手帮忙  在线等啊  谢谢了啊  

解决方案 »

  1.   

    update a set a.数量=a.数量+b.qty from 数量 a
    inner join (select 款号,sum(case 采购类型 when 1 then 数量 when 2 then -数量 end)qty from 采购明细表 group by 款号) b
    on a.款号=b.款号insert 库存表
    select 款号,sum(case 采购类型 when 1 then 数量 when 2 then -数量 end)qty
    from 采购明细表 where 款号 not in (select 款号 from 库存表)
    group by 款号
      

  2.   


    insert 库存表
    select 款号,颜色,尺码,sum(case 采购类型 when 1 then 数量 when 2 then -数量 end) 数量,金额
    from 采购明细表 where 款号 not exist (select 款号 from 库存表 where 采购明细表.款号=库存表.款号)
    group by 款号,颜色,尺码,金额
    -- 同一款,颜色,尺码,金额应该是相同的吧
      

  3.   

    insert
     库存表
    select
     款号,sum(case 采购类型 when 1 then 数量 when 2 then -数量 end)t
    from
     采购明细表 
    where
     款号 
    not in 
    (select 款号 from 库存表)
    group by 
     款号
      

  4.   

    4F补充:
    --判断条件是否成立
    if exists(select * from [库存表] a   
    where exists(select * from [采购明细表] where a.[款号]=[款号] and a.[颜色尺码]=[颜色尺码])  --判断条件自己给
    begin 
    update a set a.数量=a.数量+b.qty from [库存表] a
    inner join (
    select 款号,sum(case 采购类型 when 1 then 数量 when 2 then -数量 end)qty 
    from [采购明细表] group by 款号
    ) b on a.款号=b.款号 end 
    else 
    begin 
    insert [库存表]
    select 款号,sum(case 采购类型 when 1 then 数量 when 2 then -数量 end)qty
    from [采购明细表] where 款号 not in (select 款号 from 库存表)
    group by 款号
    end
      

  5.   

    If Exists(Select A.* From 库存表 A,采购明细表 B Where A.款号 = B.款号 And A.颜色 = B.颜色 And A.尺码 = B.尺码)
     Begin
       Update 库存表 Set A.数量 = (Case When 采购类型 = 1 Then A.数量 + B.数量 Else A.数量 - B.数量)
              From 库存表 A,采购明细表 B 
              Where A.款号 = B.款号 And A.颜色 = B.颜色 And A.尺码 = B.尺码 And B.入库标记 = 0
       Update 采购明细表 Set 入库标记 = 1 Where 入库标记 = 0 --增加入库标记
     End
    Else
       Insert Into 库存表(款号,颜色,尺码,数量,价格,金额)
       Select 款号,颜色,尺码,数量,价格,金额 From 
         (Select 款号,颜色,尺码,IsNull(Sum(数量),0) 数量,价格,IsNull(Sum(金额),0) 金额 From 采购明细表 Where 入库标记 = 0 Group By 款号,颜色,尺码,价格) T
       
      

  6.   


    你这个判断很怪异,为什么存在1就update,否则就insert,还不如不判断。
      

  7.   

    If Exists(Select A.* From 库存表 A,采购明细表 B Where A.款号 = B.款号 And A.颜色 = B.颜色 And A.尺码 = B.尺码)
     Begin
       Update 库存表 Set A.数量 = (Case When 采购类型 = 1 Then A.数量 + B.数量 Else A.数量 - B.数量)
              From 库存表 A,采购明细表 B 
              Where A.款号 = B.款号 And A.颜色 = B.颜色 And A.尺码 = B.尺码 And B.入库标记 = 0
       Update 采购明细表 Set 入库标记 = 1  
         Where 入库标记 = 0 And Exists(Select A.* From 库存表 A,采购明细表 B Where A.款号 = B.款号 And A.颜色 = B.颜色 And A.尺码 = B.尺码)--增加入库标记
     End
    Else
       Insert Into 库存表(款号,颜色,尺码,数量,价格,金额)
       Select 款号,颜色,尺码,数量,价格,金额 From 
         (Select 款号,颜色,尺码,IsNull(Sum(数量),0) 数量,价格,IsNull(Sum(金额),0) 金额 From 采购明细表 Where 入库标记 = 0 Group By 款号,颜色,尺码,价格) T
       Update 采购明细表 Set 入库标记 = 1 Where 入库标记 = 0 And Not Exists(Select A.* From 库存表 A,采购明细表 B Where A.款号 = B.款号 And A.颜色 = B.颜色 And A.尺码 = B.尺码)--增加入库标记