具有给定表数据的期望输出

时间:2012-02-23 07:10:23

标签: sql oracle oracle10g oracle11gr2

您好我有一个表测试,其结构如下:

**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功能?

1 个答案:

答案 0 :(得分:2)

不,使用PIVOT无法完成,但 可以UNPIVOT完成:

SELECT
  Pk,
  "Key",
  value
FROM Testing
UNPIVOT (
  value FOR "Key" IN (C1, C2)
)

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