SQL:将两个值转换为1列

时间:2018-03-14 20:53:56

标签: sql oracle

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) 

1 个答案:

答案 0 :(得分:0)

在Oracle中使用PIVOT运算符没有直接的方法。所以你需要一种间接的方式。

一种可能性 - 特别是如果您需要一些先前的处理(例如,因为您要旋转的表有太多列,并且您需要首先选择一个列的子集,无论如何,在旋转之前)是使用{{1该子查询中的表达式。例如:

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 中再应用一次操作。在这里你需要小心,因为即使是一个成员SELECTGREATEST和简单加法(+)等函数也会返回null,因此您需要使用{ {1}}或null等;对于某些功能而言,这根本不起作用(特别是coalesce - 两个子集平均值的nvl通常不是整个集合的平均值,如果两个子集具有不同的基数)。鉴于所有这些缺点,我会选择不举一个例子 - 但确实存在这种可能性。