嗨,我有一个表测试,其结构如下:
**Testing** PK C1 c2 --------------- 1 v11 v12 2 v21 v23 3 v31 v32
现在,我需要查询该表(测试),以便获得以下输出。
Pk Key value --------------- 1 c1 v11 1 c1 v12 2 c2 v21 2 c2 v22 3 c3 v31 3 c3 v32
Oracle 11g中的sql查询是否可以实现?11g中的PIVOT功能是否可以实现?
不,它不能用来完成PIVOT,但是 可以 用来完成**UN** PIVOT:
PIVOT
**UN** PIVOT
SELECT Pk, "Key", value FROM Testing UNPIVOT ( value FOR "Key" IN (C1, C2) )
当UNPIVOT不可用时,我通常会像这样取消透视:
UNPIVOT
SELECT t.Pk, x."Key", CASE x."Key" WHEN 'C1' THEN t.C1 WHEN 'C2' THEN t.C2 END AS value FROM Testing t CROSS JOIN ( SELECT 'C1' AS "Key" FROM DUAL UNION ALL SELECT 'C2' FROM DUAL ) x