SQL:按记录组运行总计

时间:2015-09-21 04:38:08

标签: sql teradata

我正在尝试根据记录组创建一个运行总计。我的数据如下所示

Country | Genre | Month | Amt
A         X        1       5
A         X        2       3
B         X        1       8 
B         Y        1      10
A         X        1      12

我想对Amt进行一笔运行总和,按每个国家/地区的独特类型和月份分组。所以我想要的输出是

Country | Genre | Month | Amt | RunAmt
A        X        1       5           5
A        X        2       3           3
B        X        1       8           8
B        Y        1      10         10
A        X        1      12         17

由于国家A先前已发生Genre = X和Month = 1。

我的尝试是sum(amt) over (partition by country, genre, month order by month rows between unbounded preceding and current row),但它似乎在每一行都有一笔运行金额,而不是按国家/地区的唯一出现次数。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

试试这个

SELECT *,
       Sum(amt)
         OVER(
           partition BY country, genre, month
           ORDER BY amt) as RunAmt
FROM  ( VALUES ('A','X',1,5),
               ('A','X',2,3),
               ('B','X',1,8),
               ('B','Y',1,10),
               ('A','X',1,12) )tc(Country, Genre, Month, Amt) 

答案 1 :(得分:1)

试试这个..

select *, 
    sum(amt) over 
    ( 
        partition by country, Genre, month order by amt
    ) as RunAmt 
from TableName

以下是我尝试过的SQLFiddle