在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 函数,因为键在字符串中,所以这对你有帮助。
我有以下 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 函数,因为键在字符串中,所以这对你有帮助。