一尘不染

Oracle 11 SQL:有没有一种方法可以将1行拆分为x行

sql

客户要求将Oracle DB SQL中的1行拆分为6行。

假设,最初的SQL(具有多个联接的复杂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’,D
2)A,B,C,’E’,E
3)A, B,C,’F’,F
4)A,B,C,’G’,G
5)A,B,C,’H’,H
6)A,B,C,’I’,I

基本上,第1 3列将在所有6个NEW ROWS中重复。
该过程对原始查询中的每一行重复。

这可能吗 ?如果是,怎么办?


阅读 212

收藏
2021-03-08

共1个答案

一尘不染

您只需要unpivot子句以垂直显示数据:

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,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

[Demo](https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=1f2fac3c421caa8259360b1271b97cec)

to_char() 转换是针对获取 ORA-01790 而实现的 表达式必须具有与相应表达式 错误 相同的数据类型

2021-03-08