Sql 分组和求和四分之一值

Sql 分组和求和四分之一值,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我的SQL Server 2012实例中有下表: +---------+---------+ | Quarter | Values | +---------+---------+ | Q1 | 10 | | Q2 | 15 | | Q3 | 5 | | Q4 | 1 | +---------+---------+ 我希望对季度进行分组,以便对值求和以获得 Q1=25 Q2=31 所以,Q2也和Q1中存在的先前


我的SQL Server 2012实例中有下表:

+---------+---------+
| Quarter | Values  |
+---------+---------+
| Q1      | 10      |
| Q2      | 15      |
| Q3      |  5      |
| Q4      |  1      |
+---------+---------+
我希望对季度进行分组,以便对值求和以获得
Q1=25
Q2=31
所以,Q2也和Q1中存在的先前值相加。 如果我有Q3,总和将是总和(Q1)+总和(Q2)+总和(Q3)
这样,一个简单的GROUPBY子句就不起作用了。
有谁能帮我找到一个解决方案,以便在不使用Union的情况下使用简单的select语句执行所描述的任务吗?

请注意,如果您处理多年的问题,您可能需要更改此查询

--Setup sample table
DECLARE @MyData TABLE (
    TheQuarter VARCHAR(2) NOT NULL,
    TheValue INT NOT NULL
);

--insert sample data
INSERT INTO @MyData VALUES ('Q1',10),
    ('Q1',15),
    ('Q2',5),
    ('Q2',1);

WITH Totals AS (SELECT ROW_NUMBER() OVER (ORDER BY TheQuarter ASC) AS [QuarterIndex],
            TheQuarter, SUM(TheValue) AS [TotalValue]
        FROM @MyData GROUP BY TheQuarter)
    SELECT t.TheQuarter, SUM(tPlusPrev.TotalValue) AS [TotalValue]
    FROM Totals t
        LEFT OUTER JOIN Totals tPlusPrev ON t.QuarterIndex >= tPlusPrev.QuarterIndex
    GROUP BY t.TheQuarter;

由于您使用的是SQL 2012,因此也可以使用

@编辑:


如果您要处理多年的问题,请参阅。

您使用的是哪个版本的sql server?
SELECT DISTINCT
  TheQuarter
  , SUM( TheValue ) OVER ( ORDER BY TheQuarter RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS "RollingSum"
FROM 
  MyData