取消透视表 Oracle 中的数据
Posted
技术标签:
【中文标题】取消透视表 Oracle 中的数据【英文标题】:Unpivot data in table Oracle 【发布时间】:2018-01-31 21:11:47 【问题描述】:我的来源是这样的
**Col1 Col2 Col3 Col4 Col5 Col6**
1 ABC STAT1 STAT2 COM1 COM2
我如何进入下面
**Col1 Col2 type Col4 Col5**
1 ABC STAT STAT1 STAT2
1 ABC COM COM1 COM2
我查看了 Unpivot,它能够做一列 -> 一行。但我正在寻找 1 行中的 2 列。联合所有将是一种选择,但我希望看到它使用 unpivot
【问题讨论】:
【参考方案1】:我首选的方法是横向连接,但直到 Oracle 12c 才可用。如果您只有两个选项并且您的桌子不是很大,union all
可能就足够了:
select col1, col2, 'STAT' as type, col3 as col4, col4 as col5
from t
union all
select col1, col2, 'COM' as type, col5, col6
from t;
如果扫描表两次是性能问题,还有其他选择。
没有unpivot
的一个非常简单的方法是join
:
select t.col1, t.col2, tt.type,
(case when tt.type = 'STAT' then col3 else col5 end),
(case when tt.type = 'STAT' then col4 else col6 end)
from t cross join
(select 'STAT' as type from dual union all
select 'COM' as type from dual
) tt;
【讨论】:
感谢 Gordon。在此期间,此表将变得更大。所以我有兴趣使用像 unpivot 这样的内置过程,这样我以后就不需要访问它来进行调整了以上是关于取消透视表 Oracle 中的数据的主要内容,如果未能解决你的问题,请参考以下文章