使用Oracle Analytics在任一列值发生更改时重置运行总计

sdnqo3pr  于 12个月前  发布在  Oracle
关注(0)|答案(2)|浏览(76)

我想在视图中添加一个列,该列保存Value列的累计值。当行中的Cat A或Cat B发生变化时,此列必须重置累计值。因此,输出数据必须是这样的:

CAT A  CAT B    Value   Running Total
=====  =====    =====   =============
0        1       15 
0        1       235 
0        1       306      556
0        0        
1        2       85        85
1        1       105      105 
0        2       600
0        2       70       670
0        3       564
0        3       101      665
0        1       30        30
ht4b089n

ht4b089n1#

首先,您需要一个列来指定运行总和的顺序。我假设它被称为id
第二,您似乎有一些逻辑在某些行上没有值。不清楚这个逻辑是什么。将在所有行上定义适当的“运行和”。
然后,您可以使用lag()sum()来定义组,并使用“分析”sum()来进行求和:

select t.cata, t.catb, t.value,
       sum(value) over (partition by grp order by id) as runningsum
from (select t.*,
             sum(case when cata = prev_cata and catb = prev_catb then 0
                      else 1
                  end) over (order by id) as grp
      from (select t.*, lag(cata) over (order by id) as prev_cata,
                   lag(catb) over (order by id) as prev_catb
            from t
           ) t
     ) t;
mspsb9vt

mspsb9vt2#

分区中的重置可以通过引入一个新列来实现,该列将启用分区拆分。在您的情况下,如果您创建一个新列,该列具有基于CAT A或CAT B更改的唯一值,这将允许您在子集级别运行分析函数,您的分区将包括您已经使用的一个+这个新列.

相关问题