已知库存表
序号 数量
----------
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.   


    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)