在字段达到特定数字之后选择所有行

时间:2015-09-08 08:56:40

标签: sql sql-server

我有如下表格

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

2 个答案:

答案 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

DEMO

答案 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]