使用Oracle 11g我想转动下表
ID PREFIX VALUE1 VALUE2
1 C01_ 123 AAA
1 C02_ 456 BBB
1 C03_ 789 CCC
2 C01_ 123 AAA
2 C02_ 456 BBB
3 C01_ 123 AAA
到
ID C01_VALUE1 C01_VALUE2 C02_VALUE1 C02_VALUE2 C03_VALUE1 C03_VALUE3
1 123 AAA 456 BBB 789 CCC
2 123 AAA 456 BBB null null
3 123 AAA null null null null
实际上,有两个以上的值列。简而言之,我想找到一种方法来使用前缀列来旋转表前缀列名。
答案 0 :(得分:0)
请求似乎有点傻 - 你似乎关心列NAMES,它总是可以在SELECT子句中更改。如果您希望它或多或少地自动化,那么您可以执行以下操作:
select *
from your_table
pivot ( max(value1) as value1, max(value2) as value2
for prefix in ('C01_' as C01, 'C02_' as C02, 'C03_' as C03)
)
;
当您使用PIVOT子句进行透视时,如果您不更改SELECT中的列名,它们将是IN子句中的别名,后跟下划线,后跟别名()在PIVOT中的聚合函数之后给出。下划线是自动添加的,因此您不应该在别名中提供它。