在oracle中将列名转换为行值

时间:2016-03-15 10:31:20

标签: oracle11g

我遇到了一个问题,我想将表的列名转换为行值,并将这些列名与这些列所属的表的数据组合在一起。

我的数据表如下:

ID|QUERY_REF|COL_V1|COL_V2|COL_V3|COL_V4|COL_V5|COL_V6
1|Q127|hdaskjdhakdjsadj asudakjdakhdkjjdjkskjdjsakhasuygwyeqe1747434834094432uilknfja|||||

期望的输出

ID|QUERY_REF|COLUMNS
1|Q127|COL_V1
1|Q127|COL_V2
1|Q127|COL_V3
1|Q127|COL_V4
1|Q127|COL_V5
1|Q127|COL_V6

到目前为止,我已搜索过网络,但没有任何示例与我的问题相对应。

我使用union开发了一个select语句。但它并没有给我我想要的结果。请帮忙。

1 个答案:

答案 0 :(得分:1)

假设您只想要列中至少有一个值的列名,可以使用unpivot

select distinct ID, QUERY_REF, COLUMNS 
from tableName
UNPIVOT (cols FOR COLUMNS IN (COL_V1 AS 'COL_V1', COL_V2 AS 'COL_V2', COL_V3 AS 'COL_V3', COL_V4 AS 'COL_V4', COL_V5 AS 'COL_V5', COL_V6 AS 'COL_V6'));