总和与其他列不同

时间:2016-03-26 05:08:57

标签: sql database oracle

我有PL / SQL的问题,因为我是PL / SQL世界的新手。 假设我有这样的表格。

COlumnA  COlumnB    COlumnC
1      5000000000   X
1      5000000000   X
2      4350000000   X
2      4350000000   X
3      10000000000  X
3      10000000000  X
3      10000000000  X
4      1809469720   Y
5      10000000000  X
5      10000000000  X
6      3000000000   X
6      3000000000   X

我想生成如下的选择声明。

ColumnC |Sum
X       |32350000000
Y       |1809469720

我已经使用内部查询在Oracle 12c中解决了这个问题,但是当系统需要转到Oracle 11g时,我的查询不再起作用了,我需要只有一个select语句才能得到预期的结果。

有人可以建议吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

这就是我提出的......使用内联视图而不是SELECT列表中的相关子查询。

  SELECT d.columnc        AS "ColumnC"
       , SUM(d.columnb)   AS "Sum"
    FROM ( SELECT t.columna
                , t.columnb
                , t.columnc
             FROM tablea t
            GROUP
               BY t.columna
                , t.columnb
                , t.columnc
         ) d
   GROUP
      BY d.columnc

这使用内联视图(别名为" d")来返回" distinct"从tablea的行集。我们可以使用GROUP BY子句或包含DISTINCT关键字,甚至通过编写使用UNION集合运算符的查询来获取不同的集合。

将该查询包装在parens中,分配别名,并在FROM子句中使用它,就好像它是一个表或视图一样。

该语句的操作类似于在FROM子句中引用VIEW。

您不需要这样做,但要说明上述查询的运作方式。我们可以创建一个视图,如下所示:

  CREATE VIEW d AS 
           SELECT t.columna
                , t.columnb
                , t.columnc
             FROM tablea t
            GROUP
               BY t.columna
                , t.columnb
                , t.columnc

然后我们可以引用另一个查询的FROM子句中的视图,例如

  SELECT d.columnc        AS "ColumnC"
       , SUM(d.columnb)   AS "Sum"
    FROM d
   GROUP
      BY d.columnc

但我们实际上并不需要创建VIEW对象。我们可以将视图查询包含为"内联视图"。

我不相信Oracle 11g对嵌入式视图的嵌套限制为三个级别。我怀疑你遇到的限制与相关的子查询有关。子查询可以引用外部查询中的列,但只能使用它所使用的查询中的一个级别...列。它不能引用更远的查询中的列。 (我没有通过测试确认,但那是我的回忆。)

这是来自Oracle的实际ORA和/或PLS错误消息在识别您遇到的限制方面有所帮助的地方。

答案 1 :(得分:0)

首先找到distinctCOlumnACOlumnB的{​​{1}}值然后进行汇总

试试这个

COlumnC

答案 2 :(得分:-2)

或者您可以简单地使用此查询。

Select sum(columnB) as sum,columnC from table_name group by ColumnC;