在Oracle中连续汇总列

时间:2016-11-02 14:34:33

标签: sql oracle oracle11g

我如何在PL / SQL(Oracle 11)中做这样的事情?

select 
  1 as aa,
  2 as bb,
  3 as cc,
  (aa + bb + cc) as total
from my_table;

得出这个:

-------------------------
aa   bb   cc     total
-------------------------
1    2    3      6
-------------------------

4 个答案:

答案 0 :(得分:1)

这是你需要的吗?

SELECT aa,bb,cc,aa+bb+cc as total 
FROM (
    SELECT 1 as aa,
           2 as bb,
           3 as cc
    FROM My_Table)

如果是这样,我不明白为什么要使用My_Table而不是双..

答案 1 :(得分:0)

select aa,
       bb,
       cc,
       aa + bb + cc as total
from
(
  select 1 as aa,
         2 as bb,
         3 as cc
  from dual
)

答案 2 :(得分:0)

我们还必须处理空值,因为它会导致结果

SELECT (temp.a + temp.b + temp.c) sumTemp FROM (
  SELECT NVL(a,0) as a, NVL(b,0) as b, NVL(c,0) as c  FROM DUAL 
) temp

答案 3 :(得分:0)

如果我正确理解你的问题,你就不能 - 不像你写的那样。您无法在同一SELECT(同一级别)中构建另一列时引用列别名。而不是aa + bb + cc,您将不得不重复1, 2, 3

为了澄清,我相信你的问题背后的内容是这样的:

select   deptno, max(salary) as max_s, min(salary) as min_s, (max_s + min_s)/2 as mid_s
from     scott.emp
group by deptno

(尝试使用大多数Oracle数据库安装中存在的标准EMP架构中的SCOTT表,按部门查找中端薪水)

您不能这样做 - 您必须在最后一列的公式中重复max(salary)min(salary),否则您将需要子查询和外部查询。在几乎所有情况下,第一选择而不是第二选择将更有效(即使它需要更多写作 - 并且可能更难维护)。