求修改一个更新语句,各位牛哥来帮帮忙!
--库存表
CREATE TABLE [dbo].[WMS_Stock](
[Stock_ID] [BIGINT] IDENTITY(1,1) NOT NULL,
[StockDate] [DATETIME] NULL,
[StockSkuCode] [NVARCHAR](50) NULL,
[StockSkuName] [NVARCHAR](100) NULL,
[StockBatchNo] [NVARCHAR](50) NULL,
[SkuSta] [NVARCHAR](50) NULL,
[StockQty] [BIGINT] NULL,
[StockZQty] [BIGINT] NULL,
[StockLoca] [NVARCHAR](50) NULL
) ON [PRIMARY]
GO
--出库表
CREATE TABLE [dbo].[WMS_Out_OrderList](
[Order_ID] [BIGINT] IDENTITY(1,1) NOT NULL,
[OrderNO] [NVARCHAR](50) NULL,
[OrderListSkuCode] [NVARCHAR](50) NULL,
[OrderListSkuName] [NVARCHAR](100) NULL,
[OrderListBatchNo] [NVARCHAR](50) NULL,
[SkuSta] [NVARCHAR](50) NULL,
[OrderListQty] [BIGINT] NULL,
[OrderListTime] [DATETIME] NULL
) ON [PRIMARY]
GO
--插入库存表数据
insert WMS_Stock([Stock_ID],[StockDate],[StockSkuCode],[StockSkuName],[StockBatchNo],[SkuSta],[StockQty],[StockZQty],[StockLoca]) values (12,'2015-09-16 10:01:00.000','1001001','榛果威化巧克力T3(6*16*T3)','20140911','C001',7,7,'A1101')
insert WMS_Stock([Stock_ID],[StockDate],[StockSkuCode],[StockSkuName],[StockBatchNo],[SkuSta],[StockQty],[StockZQty],[StockLoca]) values (13,'2015-09-16 10:01:00.000','1001001','榛果威化巧克力T3(6*16*T3)','20140709','C001',13,13,'A1102')
insert WMS_Stock([Stock_ID],[StockDate],[StockSkuCode],[StockSkuName],[StockBatchNo],[SkuSta],[StockQty],[StockZQty],[StockLoca]) values (14,'2015-09-16 11:51:00.000','1001001','榛果威化巧克力T3(6*16*T3)','20141219','C001',4,0,'A1103')
insert WMS_Stock([Stock_ID],[StockDate],[StockSkuCode],[StockSkuName],[StockBatchNo],[SkuSta],[StockQty],[StockZQty],[StockLoca]) values (15,'2015-09-16 11:51:00.000','1001001','榛果威化巧克力T3(6*16*T3)','20131125','C001',37,5,'A1104')
--写入出库表数据
insert WMS_Out_OrderList([Order_ID],[OrderNO],[OrderListSkuCode],[OrderListSkuName],[OrderListBatchNo],[SkuSta],[OrderListQty],[OrderListTime]) values (1,'OGR201511120001','1001001','榛果威化巧克力T3(6*16*T3)','20140911','C001',10,'2015-11-12 11:51:00.000')
insert WMS_Out_OrderList([Order_ID],[OrderNO],[OrderListSkuCode],[OrderListSkuName],[OrderListBatchNo],[SkuSta],[OrderListQty],[OrderListTime]) values (2,'OGR201511120001','1001001','榛果威化巧克力T3(6*16*T3)','20140709','C001',15,'2015-11-12 11:51:00.000')
insert WMS_Out_OrderList([Order_ID],[OrderNO],[OrderListSkuCode],[OrderListSkuName],[OrderListBatchNo],[SkuSta],[OrderListQty],[OrderListTime]) values (3,'OGR201511120001','1001001','榛果威化巧克力T3(6*16*T3)','20131125','C001',5,'2015-11-12 11:51:00.000')
/*字段表中文解释
WMS_Stock表
Stock_ID ID自增
StockDate 创建时间
StockSkuCode 产品代码
StockSkuName 产品名称
StockBatchNo 批次号
SkuSta 状态
StockQty 库存数量
StockZQty 发货占用数量
StockLoca 库位
WMS_Out_OrderList表
Order_ID ID自增
OrderNO 出库单号
OrderListSkuCode 产品代码
OrderListSkuName 产品名称
OrderListBatchNo 批次号
SkuSta 状态
OrderListQty 出库数量
OrderListTime 创建时间 */
--问题根据产品代码,批次号,状态条件用出库表更新库存表
--下面的语句只能更新对的上的数据,更新库存数量少于出库数量
;WITH a AS (
SELECT Stock_ID,StockSkuCode,StockBatchNo,SkuSta,StockQty,StockZQty,[库存_SUM] = (
SELECT SUM(StockQty)
FROM WMS_Stock
WHERE StockSkuCode = a.StockSkuCode AND
StockBatchNo = a.StockBatchNo AND
SkuSta = a.SkuSta AND
Stock_ID <= a.Stock_ID
)
FROM dbo.WMS_Stock a where StockQty>0
),
b AS (
SELECT Order_ID,OrderNO,OrderListSkuCode,SkuSta,OrderListBatchNo,SUM(OrderListQty) AS OrderListQty, [出库_SUM] = (
SELECT SUM(OrderListQty)
FROM WMS_Out_OrderList
WHERE OrderListSkuCode = b.OrderListSkuCode AND
OrderListBatchNo = b.OrderListBatchNo AND
SkuSta = b.SkuSta AND
Order_ID=b.Order_ID
)
FROM dbo.WMS_Out_OrderList b
GROUP BY b.OrderNO,b.OrderListSkuCode,b.SkuSta,b.OrderListBatchNo,Order_ID
)
UPDATE a
SET StockZQty = CASE WHEN b.[出库_SUM] < a.[库存_SUM] THEN b.[出库_SUM]
ELSE a.[库存_SUM]
END - CASE WHEN b.[出库_SUM] - b.OrderListQty < a.[库存_SUM] - a.StockQty THEN a.[库存_SUM] - a.StockQty
ELSE b.[出库_SUM] - b.OrderListQty
END
FROM a
JOIN b
ON
a.StockSkuCode = b.OrderListSkuCode AND
a.StockBatchNo = b.OrderListBatchNo AND
a.SkuSta = b.SkuSta AND
b.[出库_SUM] - b.OrderListQty < a.[库存_SUM] AND
a.[库存_SUM] - a.StockQty < b.[出库_SUM]
--库存表(WMS_Stock)结果
/*Stock_ID StockDate StockSkuCode StockSkuName StockBatchNo SkuSta StockQty StockZQty StockLoca
12 2015-09-16 10:01:00.000 1001001 榛果威化巧克力T3(6*16*T3) 20140911 C001 7 7 A1101
13 2015-09-16 10:01:00.000 1001001 榛果威化巧克力T3(6*16*T3) 20140709 C001 13 13 A1102
14 2015-09-16 11:51:00.000 1001001 榛果威化巧克力T3(6*16*T3) 20141219 C001 4 0 A1103
15 2015-09-16 11:51:00.000 1001001 榛果威化巧克力T3(6*16*T3) 20131125 C001 37 5 A1104*/
--想的结果StockZQty 为10才对
--出库数量30件,只能完全匹配上25件,剩余的5件要取批次号(StockBatchNO)最小的,
那Stock_ID 15那行的StockZQty应该是10才对,请各位大牛帮忙修改一下上面的SQL语句,谢谢!
...全文
相关推荐
java小实验:求一个整数各位数字之和
求一个整数各位数字之和。求一个整数各位数字之和。求一个整数各位数字之和。求一个整数各位数字之和。
C/C++ 求一个整数的各位数字总和算法详解及源码
这种算法的优点是简单易懂,适用于任意大小的整数。但是,该算法的缺点是需要将整数转换为字符串,可能会占用较多的内存空间和时间。求一个整数的各位数字总和算法是指将一个整数的各个位上的数字相加,得到总和。
代码_C循环-求各位数字之积_
入一个英文句子和空格字符,则输出删除了所有空格的字符测试说明以下是测试样例:样例输入:abc333dgf3样例输出:abcdgf*/
牛B硬件信息修改大师-一键修改电脑所有信息
牛B硬件信息修改大师-一键修改电脑所有信息
牛B硬件信息修改大师最新版
能修改PC硬件所有信息,,,大家都懂!!!


疑难问题
