[英]Show column names of the table in 1st data row of the query output dynamically in Oracle
有一张表,让我们说VW_RESULT如下所示:
ID
Quarter
Risk
00001
Q0
2
00001
Q1
3
00001
Q2
1
00001
Q3
1
00001
Q4
2
现在我必须在第一行显示列名。
我想要这样的 output :
Col1
Col2
Col3
ID
Quarter
Risk
00001
Q0
2
00001
Q1
3
00001
Q2
1
00001
Q3
1
00001
Q4
2
如果列数是固定的,我可以很容易地实现这一点,使用UNION ALL
。
但列数会不时变化。
我想让这个动态,这样我就不必手动输入列名。
我正在使用Oracle 11g 。
将您的列放入变量中并连接您在每次运行时获得的所有列..用执行立即执行您的并将您的变量与语句连接起来
为了满足您的要求,您的所有数据类型都应该是字符串,因为所有列都是字符串。 如果您的任何数据类型不是字符串,它将不起作用。 例如:ID 列似乎是 integer 数据类型,如果您尝试根据 SQL 标准将“ID”字符串合并到 ID 列中,它将失败。 但是,如果相应表中的所有列都是字符串格式,则以下是解决方案。
declare
v_Sql1 varchar(1000);
v_Sql2 varchar(1000);
begin
select (LISTAGG(chr(39)||column_name||chr(39), ',') WITHIN GROUP (ORDER BY
column_id)) into v_Sql1 from cols where table_name = 'VW_RESULT';
v_Sql2:= 'select * from
(select column_name from cols where table_name = ''VW_RESULT'')
pivot
(
max(column_name)
for column_name in (' || v_Sql1 || '))
union select * from VW_RESULT';
dbms_output.put_line(v_Sql1);
dbms_output.put_line(v_Sql2);
execute immediate v_Sql2;
end;
/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.