我在这里看到了其他类似的问题,但他们并不能完全满足我的需求,至少我认为是这样。
我有一个包含以下列的[reciepts]表: reciept_id, 顾客ID, ammount的 ...
让我们说:
我有来自客户1的5张未收到的收据:
reciept_id: 1 | Ammount: 110€
reciept_id: 2 | Ammount: 110€
reciept_id: 3 | Ammount: 130€
reciept_id: 4 | Ammount: 110€
reciept_id: 5 | Ammount: 190€
所以,客户1,付我220欧元。
现在我需要选择最旧的收据,直到达到这个220欧元的金额,但只是按顺序,如(收到1 +收到2)而不是(收到1 +收到4)。
你能帮我解决这个问题,或者至少给我一个最好的答案吗?
提前致谢:)
答案 0 :(得分:3)
假设总和将按顺序匹配行。以下查询将有效。
DECLARE @Table TABLE(Reciept_Id INT , Amount INT)
INSERT INTO @Table
SELECT *
FROM (
VALUES (1, 110),(2,110),(3,130),(4,110),(5,190)
) t (Reciept_Id, Amount)
--Query
SELECT * FROM
(
SELECT
Reciept_Id,
Amount,
SUM(Amount) OVER(ORDER BY Reciept_Id ROWS
BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS Total
FROM @Table
) T
WHERE T.Total <= 220
<强>输出:强>
Reciept_Id Amount Total
----------- ------- ----------
1 110 110
2 110 220
注意:查询将在SQL-Server 2012及更高版本中运行。