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
。条件聚合可以以类似或更好的性能完成它所做的一切,甚至更多。感谢您的帮助(以及我请求的更新)。我会听从你的建议。可能会有帮助: