我问过Oracle 11 SQL : Is there a way to split 1 row into x rows-这个问题非常接近,但有一点曲折...
客户要求将Oracle DB SQL中的1行分成6行。
例如,最初的SQL(具有多个join的复杂sql等)提取了9列:从X,Y,Z中选择A,B,C,D,E,F,G,H,I。 。 。 (但查询非常复杂)
1)A,B,C,D,E,F,G,H,I。
现在,客户要求返回返回到上述模式的每一行,新的输出应如下所示:1)A,B,C,“ D的名称:”,D2)A,B,C,“ E的名称:”,E3)A,B,C,“ F的名称:”,F4)A,B,C,“ G的名称:”,G5)A,B,C,“ H的名称:”,H6)A,B,C,“ I的名称:”,I
基本上,第1 3列的值将在所有6个新行中重复。新行的第4列将是一个字符串,其中说明了第5列的含义。
此过程将对原始查询中的每一行重复。
从先前的答案中,我知道unpivot可以做到这一点-只是无法自己解决这个问题。
您可以将unpivot
与concat()
函数concat( concat('Name for ',val),' : ')
或串联运算符(||
)用作'Name for '||val||' : '
一起使用:
with t(a,b,c,d,e,f,g,h,i) as
(
select 1,2,3,'D','E',2,3,'X','Y' from dual
)
select a,b,c,
concat( concat('Name for ',val),' : ') as explanation,
val
from
(
select a,b,c,to_char(d) as d, to_char(e) as e, to_char(f) as f,
to_char(g) as g, to_char(h) as h,to_char(i) as i
from t
)
unpivot
( val for col in (d,e,f,g,h,i) )
order by col