試試這個
DECLARE @Tbl TABLE (id INT, itemCode NVARCHAR(50), batchNo NVARCHAR(50), availQty INT, price DECIMAL(5,2))
INSERT INTO @Tbl VALUES
(1, 'item_1' , '07292016', 5 , 5.50),
(2 , 'item_1', '07312016' ,10, 5.50),
(3 , 'item_1', '08012016' ,2 , 6.00)
DECLARE @Quantity INT = 6
SELECT *
FROM
@Tbl
WHERE
id <= (
SELECT TOP 1
A.id
FROM
(
SELECT
id ,
itemCode ,
batchNo ,
availQty ,
price,
(SELECT SUM(availQty) FROM @Tbl IT WHERE IT.id <= T.id) AS TotalAmount
FROM
@Tbl T
) A
WHERE
A.TotalAmount >= @Quantity
ORDER BY A.id
)
輸出:
id itemCode batchNo availQty price
1 item_1 07292016 5 5.50
2 item_1 07312016 10 5.50
修訂
SELECT
R.id ,
R.itemCode ,
R.batchNo ,
R.availQty ,
R.price ,
CASE WHEN R.MaxId = id THEN R.availQty - (TotalQuantity - @Quantity)
ELSE R.availQty END OutQuantity
FROM
(
SELECT
id ,
itemCode ,
batchNo ,
availQty ,
price,
MAX(id) OVER (ORDER BY (SELECT NULL)) MaxId,
SUM(availQty) OVER (ORDER BY (SELECT NULL)) TotalQuantity
FROM
@Tbl
WHERE
id <= (
SELECT TOP 1
A.id
FROM
(
SELECT
id ,
itemCode ,
batchNo ,
availQty ,
price,
(SELECT SUM(availQty) FROM @Tbl IT WHERE IT.id <= T.id) AS TotalAmount
FROM
@Tbl T
) A
WHERE
A.TotalAmount >= @Quantity
ORDER BY A.id
)
) R
WHERE
@Quantity > 0
輸出
id itemCode batchNo availQty price OutQuantity
1 item_1 07292016 5 5.50 5
2 item_1 07312016 10 5.50 1
郵政查詢更多的澄清 –
標籤的問題與您的SQL服務器版本。如果它支持SUM OVER()解決方案很簡單。 – Serg
@jarlh,謝謝你的澄清。 – princevezt