取消透视表 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 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

快速取消数据透视表的分类汇总行和总计行

尝试在 Oracle SQL 中取消透视列时出错

如何删除透视表中的很多汇总行

取消透视到 Oracle 中的多个列

excel如何将数据透视表中的汇总项去掉?

如果 Oracle OBIEE 中的列为空,则隐藏数据透视表中的列