我有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语句才能得到预期的结果。
有人可以建议吗?
谢谢!
答案 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)
首先找到distinct
,COlumnA
和COlumnB
的{{1}}值然后进行汇总
试试这个
COlumnC
答案 2 :(得分:-2)
或者您可以简单地使用此查询。
Select sum(columnB) as sum,columnC from table_name group by ColumnC;