SQL聚合/连接非互斥变量

时间:2014-09-27 16:54:23

标签: sql oracle sum inner-join where

执行此查询的最有效方法是什么:

表中有5列:A(唯一标识符),B(分组变量),C(分组变量),D(日期值),E(数值)和F(数值),其中D列=昨天。

B和C不是互斥的。我需要为所有C找到sum(E)和sum(E,其中E> 0),此时除了日期(D列)之外没有其他过滤器。然后我需要找到,除了D列之外没有其他过滤器,所有B其中sum(E)= 0.我需要从这个提取所有A附加到B和E的最后一个查询。然后,我需要加入对EI进行总和查询的A值为C做了。从计算效率的角度来看,这是最有效的方法。

有没有办法可以运行D =昨天的所有记录的第一个查询,并从那里本地操作数据,而不是使用外部数据库运行多个查询?

谢谢。

编辑:

表:

Column A  Column C  Column B  Column D    Column E  Column F
1         A         A         09/26/2014        50      1000                   
2         A         B         09/26/2014       -20       300
3         A         C         09/26/2014        80     23500         
4         B         A         09/26/2014       -50      5000
5         B         B         09/26/2014        40      3100
6         B         C         09/26/2014        10      4500
1         A         A         09/25/2014        50      1000                   
2         A         B         09/25/2014       -20       300
3         A         C         09/25/2014        80     23500         
4         B         A         09/25/2014       -50      5000
5         B         B         09/25/2014        40      3100
6         B         C         09/25/2014        10      4500

我想要的结果是:

Column A  Column C  Column B  Column D    Column E  Column F  Sum(E on C/D)  Sum(E > 0 on C/D)
1         A         A         09/26/2014        50      1000            110                130
4         B         A         09/26/2014       -50      5000              0                 50

1 个答案:

答案 0 :(得分:0)

根据您指定的表格,以下查询将为您提供指定的所需结果

select min(columna) keep
         (dense_rank first
          order by columnb) columna
     , columnc
     , min(columnb) columnb
     , columnd
     , min(columne) keep
         (dense_rank first
          order by columnb) columne
     , min(columnf) keep
         (dense_rank first
          order by columnb) columnf
     , sum(columne) sume_1
     , sum(case
             when columne > 0 then columne
             else 0
           end) sume_2
from mytable
where columnd = to_date('09/26/2014', 'MM/DD/YYYY')
group by columnc
       , columnd