当前位置: 代码迷 >> Sql Server >> 请1复杂的更新语句,先谢过了
  详细解决方案

请1复杂的更新语句,先谢过了

热度:107   发布时间:2016-04-27 11:02:36.0
请一复杂的更新语句,先谢过了!
说明:
根据"发货表"的数据更新"库存表"的"占用数量",条件:相同商品编号,相同的仓库.请SQL语句,谢谢!

SQL code
/*发货表                        自增主键    发货单号    服务商    商品编号    商品名称    仓库    数量ID    LoadTranNo    LoadCarriers    sku    SKUNAME    Loadkz    qty117    H120914000158    深圳市恒7    800542    A2r    503    10118    H120914000158    深圳市恒7    800541    Cisr    503    6119    H120914000178    深圳市恒7    105324    sarnl    503    3120    H120914000178    深圳市恒7    800542    A2r    503    2121    H120914000178    深圳市恒7    714339    XD2    503    7库存表                                自增主键    商品编号    批号    库位    仓库    商品数量    占用数量    留用    日期ID    Sku    BatchNo    kuwei    Loadkz    Qty    Qty1    Inqty3    Drdate313    800542    120724809    56112A    503    5        NULL    2012-9-18 15:17314    800542    120724809    56112B    503    6        NULL    2012-9-18 15:17315    800542    120911809    56103B    503    14        NULL    2012-9-18 15:17316    800541    120726801    56F07A    503    1        NULL    2012-9-18 15:17317    800541    120726801    56H10A    503    7        NULL    2012-9-18 15:17318    714339    120726801    56O05A    503    13        NULL    2012-9-18 15:17319    105324    120726801    56O07A    503    1        NULL    2012-9-18 15:17320    105324    120726801    56O07A    503    2        NULL    2012-9-18 15:17结果(更新qty1(占用数量)之后得出的结果)                                自增主键    商品编号    批号    库位    仓库    商品数量    占用数量    留用    日期ID    Sku    BatchNo    kuwei    Loadkz    Qty    Qty1    Inqty3    Drdate313    800542    120724809    56112A    503    5    5    NULL    2012-9-18 15:17314    800542    120724809    56112B    503    6    6    NULL    2012-9-18 15:17315    800542    120911809    56103B    503    14    1    NULL    2012-9-18 15:17316    800541    120726801    56F07A    503    1    1    NULL    2012-9-18 15:17317    800541    120726801    56H10A    503    7    5    NULL    2012-9-18 15:17318    714339    120726801    56O05A    503    13    6    NULL    2012-9-18 15:17319    105324    120726801    56O07A    503    1    1    NULL    2012-9-18 15:17320    105324    120726801    56O07A    503    2    2    NULL    2012-9-18 15:17最后结果*/


现在只能发100分的贴子,问题解决在发100分,谢谢!

------解决方案--------------------
SQL code
--> 测试数据:[发货表]IF OBJECT_ID('[发货表]') IS NOT NULL DROP TABLE [发货表]GO CREATE TABLE [发货表]([ID] INT,[LoadTranNo] VARCHAR(13),[LoadCarriers] VARCHAR(9),[sku] INT,[SKUNAME] VARCHAR(5),[Loadkz] INT,[qty] INT)INSERT [发货表]SELECT 117,'H120914000158','深圳市恒7',800542,'A2r',503,10 UNION ALLSELECT 118,'H120914000158','深圳市恒7',800541,'Cisr',503,6 UNION ALLSELECT 119,'H120914000178','深圳市恒7',105324,'sarnl',503,3 UNION ALLSELECT 120,'H120914000178','深圳市恒7',800542,'A2r',503,2 UNION ALLSELECT 121,'H120914000178','深圳市恒7',714339,'XD2',503,7--> 测试数据:[库存表]IF OBJECT_ID('[库存表]') IS NOT NULL DROP TABLE [库存表]GO CREATE TABLE [库存表]([ID] INT,[Sku] INT,[BatchNo] INT,[kuwei] VARCHAR(6),[Loadkz] INT,[Qty] INT,[Qty1] INT,[Inqty3] INT,[Drdate] DATETIME)INSERT [库存表]SELECT 313,800542,120724809,'56112A',503,5,NULL,NULL,'2012-9-18 15:17' UNION ALLSELECT 314,800542,120724809,'56112B',503,6,NULL,NULL,'2012-9-18 15:17' UNION ALLSELECT 315,800542,120911809,'56103B',503,14,NULL,NULL,'2012-9-18 15:17' UNION ALLSELECT 316,800541,120726801,'56F07A',503,1,NULL,NULL,'2012-9-18 15:17' UNION ALLSELECT 317,800541,120726801,'56H10A',503,7,NULL,NULL,'2012-9-18 15:17' UNION ALLSELECT 318,714339,120726801,'56O05A',503,13,NULL,NULL,'2012-9-18 15:17' UNION ALLSELECT 319,105324,120726801,'56O07A',503,1,NULL,NULL,'2012-9-18 15:17' UNION ALLSELECT 320,105324,120726801,'56O07A',503,2,NULL,NULL,'2012-9-18 15:17'--------------开始查询--------------------------UPDATE b SET b.qty1=case  when  b.[出货合计] <a.[发货合计] then b.[出货合计] else a.[发货合计] end     -     case when b.[出货合计]-b.[Qty] <a.[发货合计]-a.[发货合计]  then  a.[发货合计]-a.[发货合计] else b.[出货合计]-b.[Qty] endfrom   (    SELECT sku,Loadkz,SUM(qty) AS [发货合计] FROM [发货表] GROUP BY sku,Loadkz)a join (    select*,[出货合计]=(select sum([Qty]) from [库存表] where  [sku]=b.[sku] AND [Loadkz]=b.[Loadkz] and  [ID]<= b.[ID])     from   [库存表]  b   )   b on   a.[sku]=b.[sku] AND a.[Loadkz]=b.[Loadkz] SELECT * FROM [库存表]----------------结果----------------------------/* ID    Sku    BatchNo    kuwei    Loadkz    Qty    Qty1    Inqty3    Drdate313    800542    120724809    56112A    503    5    5    NULL    2012-09-18 15:17:00.000314    800542    120724809    56112B    503    6    6    NULL    2012-09-18 15:17:00.000315    800542    120911809    56103B    503    14    1    NULL    2012-09-18 15:17:00.000316    800541    120726801    56F07A    503    1    1    NULL    2012-09-18 15:17:00.000317    800541    120726801    56H10A    503    7    5    NULL    2012-09-18 15:17:00.000318    714339    120726801    56O05A    503    13    7    NULL    2012-09-18 15:17:00.000319    105324    120726801    56O07A    503    1    1    NULL    2012-09-18 15:17:00.000320    105324    120726801    56O07A    503    2    2    NULL    2012-09-18 15:17:00.000*/
  相关解决方案