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

Convert horizontal table to vertical in oracle

我有以下 table 格式:

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

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

输出:

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

我在 oracle 11g 中查找 PIVOT 函数,但输入 table 中的 "Key" 值不是一组固定值,它们可以是任何值。 我还寻找了其他此类问题,但我不确定应该如何编写查询。

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

已编辑:

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

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

谢谢!

您可以按如下方式应用枢轴函数。

   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));

你可以用dynamic sql 因为你说key不固定 为键创建一个字符串,这将对您有所帮助。将这个字符串传递给你的 pivot 函数,因为键在字符串中,所以这对你有帮助。