2016-03-26 58 views
4

由于我是PL/SQL领域的新手,因此我遇到了PL/SQL问题。 比方说,我有这样的桌子。Sum其他列的差异

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 

而且我想产生select语句如下。

ColumnC |Sum 
X  |32350000000 
Y  |1809469720 

我已经解决了与内部查询甲骨文12C这个问题,但是当系统需要去到Oracle 11g,我查询不工作了,我需要有只有一个select语句预期的结果。

任何人都可以请指教?

谢谢!

+0

你可以显示你的查询'Oracle 12c'查询。此外,这是一个非常基本的SQL问题并不需要任何特殊的功能来解决这个问题,因此请显示您的原始查询 –

+0

嗨Prdp, 以下是我在Oracle 12c中的查询,但它在11g中不工作,因为oracle11g不支持超过1级子查询,CMIIW。 (SELECT SUM(ColumnB)FROM (SELECT DISTINCT ColumnA,ColumnB FROM tableA where ColumnC = a.ColumnC)) from tableA一个由ColumnC组成的组; – Ricky

+0

当你这样做'选择ColumnC,总和(ColumnB) from Table1 group by ColumnC' –

回答

-2

或者你可以简单地使用这个查询。

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

首先找到的COlumnACOlumnBCOlumnCdistinct值然后做汇总

试试这个

select COlumnC,sum(COlumnB) from 
(
select distinct COlumnA,COlumnB,COlumnC 
from Table1 
) 
Group by COlumnC 
+0

谢谢你的回答,它工作得很好,但是有没有可能只用一条select语句来查询它?我提供的查询只是整个查询的一部分,如果我使用三个select语句,它将在oracle 11g中出现错误:( – Ricky

+0

@Ricky - 您能否发布完整查询以便我们可以检查它是如何添加的 –

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”)从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 

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

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

但是我们实际上并不需要创建VIEW对象。我们可以将视图查询作为“内联视图”。


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

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