Sql - SELECT行,直到行的总和为某个值

时间:2018-02-12 12:31:11

标签: sql-server

我在这里看到了其他类似的问题,但他们并不能完全满足我的需求,至少我认为是这样。

我有一个包含以下列的[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)。

你能帮我解决这个问题,或者至少给我一个最好的答案吗?

提前致谢:)

1 个答案:

答案 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及更高版本中运行。