Sql Oracle中的数据透视

Sql Oracle中的数据透视,sql,oracle,pivot,oracle12c,Sql,Oracle,Pivot,Oracle12c,我有这样的数据: | ITEM_CD | CARACT_CD | CARACT_VALUE | DESCRIPTION | | 1 | A1 | yyy | descr1 | | 1 | B1 | xxx | descr2 | | 2 | A1 | uuu |

我有这样的数据:

| 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函数编写正确的查询吗


非常感谢

我建议条件聚合:

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
。条件聚合可以以类似或更好的性能完成它所做的一切,甚至更多。

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