2015-05-01 31 views
0

我想复制锚定的sumif(类似于excel)。为了说明这一点,这里有一个样本数据集:根据行号动态定义总和范围?

Tag #1 #2 
A 2 4 
B 1 5 
C 3 5 
D 7 0 
E 9 3 

我希望得到的输出:

Tag row_number sum_#1 sum_#2 
A  1   22  17 
B  2   20  13 
C  3   19  8 
D  4   16  3 
E  5   9  3 

那么有效,使用ROW_NUMBER()函数来此基础求和断。或者,如果有另一种方式来做到这一点,那也很棒。我已经尝试了一段时间,并会发布更新,如果我找出如何解决这个问题。

回答

1

您可以使用sum()作为窗口函数来做到这一点:

select 
    Tag, 
    row_number() over (order by tag) as "row_number", 
    sum("#1") over (order by tag desc) as "sum_#1", 
    sum("#2") over (order by tag desc) as "sum_#2" 
from table order by tag; 

Sample SQL Fiddle

与样品数据输出将是:

| tag | row_number | sum_#1 | sum_#2 | 
|-----|------------|--------|--------| 
| A |   1 |  22 |  17 | 
| B |   2 |  20 |  13 | 
| C |   3 |  19 |  8 | 
| D |   4 |  16 |  3 | 
| E |   5 |  9 |  3 |