[英]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
,所以你需要使用coalesce
或nvl
和这样的; 而对于一些功能,这将不会(在所有的工作avg
尤其是- avg
两个子集的平均值一般不整组的平均值,如果两个子集有不同的基数)。 鉴于所有这些缺点,我将选择不举一个例子-但这种可能性确实存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.