34,593
社区成员
发帖
与我相关
我的任务
分享
ALTER PROC sp_GetInventory
(
@物料代码 nvarchar(23),
@需求量 INT
)
AS
WITH CTET
AS ( SELECT * ,
SUM([库存数量])OVER(ORDER BY [入库日期] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)AS SumQty
FROM Tab1 AS t
WHERE [物料代码] = @物料代码
AND [库存数量] > 0
)
SELECT [物料代码],[入库日期],[库存数量]=CASE WHEN SumQty<=@需求量 THEN [库存数量] ELSE @需求量-SumQty+[库存数量] END
FROM CTET
WHERE SumQty - [库存数量] < @需求量;
GO
EXEC sp_GetInventory '001',180
GO
/*
物料代码 入库日期 库存数量
001 2017-05-01 100
001 2017-06-01 80*/
use Tempdb
go
--> --> 中国风(Roy)生成測試數據
if not object_id(N'Tab1') is null
drop table Tab1
Go
Create table Tab1([物料代码] nvarchar(23),[入库日期] Date,[库存数量] int)
Insert Tab1
select N'001','2017-5-1',100 union all
select N'001','2017-6-1',200 union all
select N'001','2017-8-1',1000 union all
select N'002','2017-5-2',300
GO
ALTER PROC sp_GetInventory
(
@物料代码 nvarchar(23),
@需求量 INT
)
AS
WITH CTET
AS ( SELECT * ,
( SELECT SUM([库存数量])
FROM Tab1
WHERE [物料代码] = t.[物料代码]
AND [入库日期] <= t.[入库日期]
AND [库存数量] > 0
) AS SumQty
FROM Tab1 AS t
WHERE [物料代码] = @物料代码
AND [库存数量] > 0
)
SELECT [物料代码],[入库日期],[库存数量]=CASE WHEN SumQty<=@需求量 THEN [库存数量] ELSE @需求量-SumQty+[库存数量] END
FROM CTET
WHERE SumQty - [库存数量] < @需求量;
GO
EXEC sp_GetInventory '001',180
GO
/*
物料代码 入库日期 库存数量
001 2017-05-01 100
001 2017-06-01 80*/