我有如下表格
ID | Name | Value
---+------+-------
1 | X | 10
2 | y | 15
3 | z | 3
4 | A | 20
5 | B | 6
我想选择sum(Value)
达到特定数字后的所有行
示例: -
如果该特定数字为11,则结果集将为:
2 | y | 15
3 | z | 3
4 | A | 20
5 | B | 6
如果该特定数字为25,则结果集将为
3 | z | 3
4 | A | 20
5 | B | 6
如果该特定数字为30,则结果集将为
4 | A | 20
5 | B | 6
如果该特定数字为50,则结果集将为
5 | B | 6
答案 0 :(得分:2)
您可以使用此相关子查询方法来计算运行总计:
declare @value int
set @value = 11
;WITH CTE AS
(
SELECT t.*,
SumBefore = (SELECT SUM(Value)
FROM dbo.TableName t2
WHERE t2.ID <= t.ID)
FROM TableName t
)
SELECT CTE.*
FROM CTE
WHERE SumBefore > @value
答案 1 :(得分:0)
您可以使用此简单查询(如果您有SQL Server 2008 +):
SELECT ID, Name, Value
FROM (
SELECT *
, SUM(Value) OVER (ORDER BY ID) As SumNow
FROM yourTable) t
WHERE
(SumNow > ?);
<强> [SQL Fiddle Demo] 强>
对于旧版本的SQL Server,您可以使用此查询:
SELECT ID, Name, Value
FROM yourTable t
WHERE
((SELECT SUM(Value)
FROM yourTable ti
WHERE ti.ID <= t.ID) > ?);
<强> [SQL Fiddle Demo] 强>