【发布时间】:2016-07-08 04:19:52
【问题描述】:
我有一个如下所示的 SQL 表:
Id Quantity
1 24.857
2 24.84
3 24.881
4 24.823
我需要选择数量的累积总和,直到达到指定值 - 比如说 50。 因此,对于上表,我需要查询返回前 3 行。 (前两行数量之和没有达到50,所以我也需要第三行。
现在我有下面的代码,它很接近但不太正确。此查询的结果仅返回表的前两行,这是不够的。
DECLARE @point INT = 50;
WITH x(Id, Quantity, RowNum, TotalQuantity) AS
(
SELECT
id, quantity, ROW_NUMBER() OVER (ORDER BY id),
SUM(quantity) OVER (ORDER BY id RANGE UNBOUNDED PRECEDING)
FROM inventory
)
SELECT x.Id, x.RowNum, x.Quantity, x.TotalQuantity
FROM x
WHERE x.TotalQuantity <= @point
ORDER BY x.Id
此查询结果如下:
Id RowNum Quantity TotalQuantity
1 1 24.857 24.857
2 2 24.84 49.697
我觉得好像我需要一个 WHILE 循环在这里的某个地方,我尝试过但无济于事。
非常感谢任何帮助,谢谢。
【问题讨论】:
标签: sql while-loop