在Oracle 11g中使用带前缀的列名进行透视

时间:2017-09-20 19:25:52

标签: sql oracle11g

使用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

实际上,有两个以上的值列。简而言之,我想找到一种方法来使用前缀列来旋转表前缀列名。

1 个答案:

答案 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中的聚合函数之后给出。下划线是自动添加的,因此您不应该在别名中提供它。