首页 > 解决方案 > Oracle 11 SQL:有没有办法将 1 行拆分为 x 行

问题描述

客户要求将 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

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

这可能吗 ?如果是,如何?

标签: sqloracleunpivot

解决方案


可能最简单的使用union all

select a, b, c, 'D' as which, d as val from t union all
select a, b, c, 'E', e from t union all
select a, b, c, 'F', f from t union all
select a, b, c, 'G', g from t union all
select a, b, c, 'H', j from t union all
select a, b, c, 'I', i from t ;

这是最简单的方法,但不是最有效的。它将为每一列扫描一次表。对于不太大的表,从性能角度来看,这可能很好(表缓存在内存中)。

如果“表”确实是一个视图,那么性能可能是一个更重要的问题。


推荐阅读