繁体   English   中英

SQL:将两个值放入1列

[英]SQL: Pivoting two values into 1 column

for fluid in ('CN' as liq, 'G' as  gas,'W' as  water)

我本质上想做的是说一些

for fluid in ('CN' **or 'O'** as liq, 'G' as  gas,'W' as  water) 

在Oracle中,没有直接的方法可以使用PIVOT运算符执行此操作。 因此,您需要一种间接方式。

一种可能的情况是-在该子查询中使用一个case表达式-尤其是如果您需要进行一些先验处理(例如,由于要透视的表具有太多列,并且无论如何都要先选择一个列的子集,然后再进行透视)。 例如:

select job, ten_twenty, all_others
from   (
         select sal, job, 
                case when deptno in (10, 20) then 10 else 30 end as dept_grp
         from   scott.emp
       )
pivot  ( sum(sal) for dept_grp in (10 as ten_twenty, 30 as all_others) )
;

JOB       TEN_TWENTY ALL_OTHERS
--------- ---------- ----------
CLERK           3200        950
SALESMAN                   5600
PRESIDENT       5000           
MANAGER         5425       2850
ANALYST         6000           

或者,您可以先进行旋转,然后在外部SELECT再应用一个操作。 在这里,你必须要小心,因为像函数GREATEST和简单的加法( + )返回null ,如果连一个成员为null ,所以你需要使用coalescenvl和这样的; 而对于一些功能,这将不会(在所有的工作avg尤其是- avg两个子集的平均值一般不整组的平均值,如果两个子集有不同的基数)。 鉴于所有这些缺点,我将选择不举一个例子-但这种可能性确实存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM