客户要求将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中重复。 该过程对原始查询中的每一行重复。
这可能吗 ?如果是,怎么办?
您只需要unpivot子句以垂直显示数据:
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 而实现的 : 表达式必须具有与相应表达式 错误 相同的数据类型 。