在oracle中将水平表转换为垂直表

时间:2017-03-16 05:38:23

标签: sql oracle oracle11g pivot

我有以下表格格式:

 ID | Key | Value
 --   ---   -----
 1     A     aa    
 2     B     bb
 3     A     ay
 4     C     cc
 5     B     bx
 6     C     ct 

我需要将此表格转换为以下格式:

输出:

 A    B    C
---  ---  ---
aa   bb   cc
ay   bx   ct

我在oracle 11g中查找了PIVOT函数,但输入表中的“Key”值不是一组固定的值,它们可以是任何值。 我也寻找其他类似的问题但我不确定如何编写查询。

任何帮助将不胜感激,谢谢!

编辑:

对于解决方案,我想执行以下查询,但它在IN子句的子查询中给出了错误。我不明白为什么会这样。

Select * from (Select Key, Value, Id from tableName
pivot (max(Value) for Key IN (SELECT distinct Key from tableName)));

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以按如下方式应用枢轴功能。

   select * from
    (select Key,Value from yourtable) 
    pivot(max(Value) for Key in ('A', 'B', 'C'));

pivot中的子查询仅与XML关键字一起使用

如下所示进行查询:

Select * from (Select Key, Value, Id from tableName)
pivot xml (max(Value) for Key IN (SELECT distinct Key from tableName));

答案 1 :(得分:1)

您可以使用动态sql,因为您已经说过密钥没有修复 为密钥创建一个字符串,这将对您有所帮助。将此字符串传递给您的枢轴函数,因为键在字符串中,这样可以帮助您。