oracle sql 11G中如何将列转置为行
Posted
技术标签:
【中文标题】oracle sql 11G中如何将列转置为行【英文标题】:How to transpose column into row in oracle sql 11G 【发布时间】:2016-12-03 17:14:18 【问题描述】:我需要将下面的列转换为行
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
尝试使用枢轴运算符/子句,
如果表格包含更多列数,则我需要提及表格的所有列名,在 in 子句的数据透视函数中无法提及,
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
谁能告诉我如何将列转换为行
【问题讨论】:
您要动态创建数据透视列吗? 【参考方案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' ;
【讨论】:
【参考方案2】:在谷歌上搜索了这么多时间
我发现枢轴查询没有任何动态功能
所以在我在这里找到解决方案之后
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' $') )
我希望这会有所帮助。
【讨论】:
无法在我的项目中使用它。无论如何感谢及时响应 发生了什么错误?首先你需要运行paste.ubuntu.com/21378705,然后上面的查询很有用。以上是关于oracle sql 11G中如何将列转置为行的主要内容,如果未能解决你的问题,请参考以下文章