我需要将列转换为下面的行
select column_name from all_tab_cols where table_name='TABLE_NAME' ;
COLUMN_1
COLUMN_2
COLUMN_3
COLUMN_4
COLUMN_5
COLUMN_6
COLUMN_7
尝试使用pivot operator / clause,
我需要提一下表的所有列名,如果表包含更多的列数,则无法在in子句中的pivot函数中提及,
select * from
(
select column_name
from all_tab_cols
where table_name = 'TABLE_NAME'
)
pivot ( min(column_name) for column_name in
(
'COLUMN_1', 'COLUMN_2', 'COLUMN_3', 'COLUMN_4', 'COLUMN_5', 'COLUMN_6', 'COLUMN_7'
));
预期产出:
COLUMN_1 COLUMN_2 COLUMN_3 COLUMN_4 COLUMN_5 COLUMN_6 COLUMN_7
任何人都可以建议如何将列转换为行
答案 0 :(得分:1)
试试这个:
select listagg(A,' ') within group (order by A) as Names
from test
在您的情况下,查询如下:
select listagg(column_name,' ') within group (order by column_name) as column_name
from all_tab_cols
where table_name='TABLE_NAME' ;
答案 1 :(得分:1)
我发现数据透视查询没有任何动态功能
所以我在这里找到解决方案后
https://technology.amis.nl/2006/05/24/dynamic-sql-pivoting-stealing-antons-thunder/
从这里下载枢轴功能
http://paste.ubuntu.com/21378705/
运行此脚本,此脚本自动创建枢轴功能
使用此函数,我们可以从行创建动态列。
示例:
select * from table( pivot( Q'$ select column_name,column_name name
from all_tab_cols where table_name = 'TABLE_NAME' $') )
我希望这会有所帮助。