已知库存表
序号 数量
----------
1 200
2 400
3 100
4 600如果要数量200,则取第1条记录;
如果要数量300,则取第1,2两条记录;
如果要数量500,则取第1,2两条记录;
如果要数量600,则取第1,2两条记录;
如果要数量800,则取第1,2,3,4两条记录;
如果要数量10000,则取第1,2,3,4两条记录;库存的数量要>=需求量,并且是按序号取。
序号 数量
----------
1 200
2 400
3 100
4 600如果要数量200,则取第1条记录;
如果要数量300,则取第1,2两条记录;
如果要数量500,则取第1,2两条记录;
如果要数量600,则取第1,2两条记录;
如果要数量800,则取第1,2,3,4两条记录;
如果要数量10000,则取第1,2,3,4两条记录;库存的数量要>=需求量,并且是按序号取。
IF OBJECT_ID(N'TEMPDB.DBO.#T') IS NOT NULL
DROP TABLE #T
GOCREATE TABLE #T
(ID INT IDENTITY(1,1),
AMOUNT INT)INSERT INTO #T
SELECT 200 UNION ALL
SELECT 400 UNION ALL
SELECT 100 UNION ALL
SELECT 600 DECLARE @AMT_REQUIRE INTSET @AMT_REQUIRE=1000;WITH CTE
AS
(SELECT A.*,SUB_TOTAL,@AMT_REQUIRE AS AMT
FROM #T A
OUTER APPLY (SELECT SUM(AMOUNT) AS SUB_TOTAL FROM #T WHERE ID<=A.ID) AS B)SELECT *
FROM CTE
WHERE SUB_TOTAL<AMT OR ID=(SELECT TOP 1 ID FROM CTE WHERE SUB_TOTAL>=AMT ORDER BY ID ASC)