转置 Oracle 表/数据集

Posted

技术标签:

【中文标题】转置 Oracle 表/数据集【英文标题】:Transpose Oracle table/data set 【发布时间】:2019-09-10 19:10:04 【问题描述】:

我需要一些关于转置表格的输入/帮助:

Key | ATTR_NAME | ATTR_VALUE
1234|  SS_VALUE |  SENSITIVE 
1234|  XX_VALUE |   4456

转置后,我希望我的输出看起来像:

Key | SS_VALUE | XX_VALUE
1234| SENSITIVE|  4456

提前致谢,

【问题讨论】:

【参考方案1】:

如果这只是大约 2 个 cols 转置,那么条件聚合可能会对您有所帮助 -

SELECT Key
      ,MAX(CASE WHEN ATTR_NAME = 'SS_VALUE' THEN ATTR_VALUE END) SS_VALUE 
      ,MAX(CASE WHEN ATTR_NAME = 'XX_VALUE' THEN ATTR_VALUE END) XX_VALUE
FROM T
GROUP BY Key

【讨论】:

【参考方案2】:

一种选择是使用包含 pivot 关键字的查询,因为您需要的是旋转:

select *
  from
  ( select * from tab )
  pivot
  (
   max(attr_value) for attr_name in ( 'SS_VALUE' as ss_value, 'XX_VALUE' as xx_value )
  );

Demo

【讨论】:

以上是关于转置 Oracle 表/数据集的主要内容,如果未能解决你的问题,请参考以下文章

用SQL给经过两次转置的结果集添加列标题

用SQL给经过两次转置的结果集添加列标题

oracle存储过程 中把临时表数据 返回结果集

oracle有多个整个数据库备份集 如何选择恢复的备份集

如何为 OLAP 多维数据集部署 Oracle 维度表

oracle 存储过程,数据处理并返回结果集问题