我在这里看到了其他类似的问题,但它们并不能完全满足我的需求,至少我是这么认为的。
我有一个包含以下列的 [receipts] 表:
收据,
客户ID,
数量
...
让我们说:
我有 5 张来自客户 1 的未付款收据:
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)。
您能帮我找到对此问题的最佳查询,或者至少为我指出最佳答案吗?
提前致谢 :)
假设总和将按顺序匹配行。以下查询将起作用。
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
Output:
Reciept_Id Amount Total
----------- ------- ----------
1 110 110
2 110 220
Note :查询将在 SQL-Server 2012 及更高版本中运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)