【问题标题】:Desired output with given table data具有给定表数据的所需输出
【发布时间】:2012-02-24 18:42:06
【问题描述】:

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

**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 特性可以实现吗?

【问题讨论】:

  • 谁能告诉我这在查询中是否可行,或者我需要为此编写一个过程

标签: sql oracle oracle10g oracle11gr2


【解决方案1】:

不,不能用PIVOT 完成,但是可以<b>UN</b>PIVOT 完成:

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

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 2013-01-28
    • 2016-09-07
    • 1970-01-01
    • 2022-11-27
    • 2018-03-15
    • 2010-10-24
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多