Oracle中的数据透视[关闭]

Posted

技术标签:

【中文标题】Oracle中的数据透视[关闭]【英文标题】:Data pivot in Oracle [closed] 【发布时间】:2020-04-23 00:55:37 【问题描述】:

我有这样的数据:

| ITEM_CD |  CARACT_CD |   CARACT_VALUE     | DESCRIPTION |
|   1     |   A1       |   yyy              | descr1      |  
|   1     |   B1       |   xxx              | descr2      |  
|   2     |   A1       |   uuu              |             |  
|   2     |   B1       |   rrr              | descr3      |  
|   3     |   C1       |   kkk              |             |  

我希望将数据表示为:

| ITEM_CD |    A1      |   A1_DS     |    B1    |    B1_DS       |    C1    |    C1_DS       | 
|   1     |   yyy      |   descr1    |    xxx   |    descr2      |          |                |  
|   2     |   uuu      |             |    rrr   |    descr3      |          |                |  
|   3     |            |             |          |                |    kkk   |                |  

有人可以帮我使用 Oracle 中的 PIVOT 函数编写正确的查询吗?

非常感谢!

【问题讨论】:

可以帮忙:oracletutorial.com/oracle-basics/oracle-pivot 【参考方案1】:

我推荐条件聚合:

select item_cd,
       max(case when CARACT_CD = 'A1' then CARACT_VALUE end) as a1,
       max(case when CARACT_CD = 'A1' then DESCRIPTION end) as a1_desc,
       max(case when CARACT_CD = 'B1' then CARACT_VALUE end) as b1,
       max(case when CARACT_CD = 'B1' then DESCRIPTION end) as b1_desc,
       max(case when CARACT_CD = 'C1' then CARACT_VALUE end) as c1,
       max(case when CARACT_CD = 'C1' then DESCRIPTION end) as c1_desc
from t
group by item_cd;

我不推荐pivot。条件聚合可以完成它所做的一切——甚至更多——具有相似或更好的性能。

【讨论】:

感谢您的帮助(以及我的请求的更新)。我会听从你的建议。

以上是关于Oracle中的数据透视[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

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

取消透视表 Oracle 中的数据

oracle sql中的动态数据透视

oracle sql中的动态数据透视

使用数据透视在 Oracle 中显示列名

使用子查询 oracle sql 进行数据透视