sql—在oracle中动态显示查询输出的第一个数据行中表的列名

cngwdvgl  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(356)

有一个表,让我们说vw\u结果如下:
ID Quarter Risk 00001 Q0 2 00001 Q1 3 00001 Q2 1 00001 Q3 1 00001 Q4 2 现在我必须在第一行显示列名。
我想要这样的输出: Col1 Col2 Col3 ID Quarter Risk 00001 Q0 2 00001 Q1 3 00001 Q2 1 00001 Q3 1 00001 Q4 2 如果列的数量是固定的,我可以很容易地实现这一点,使用 UNION ALL .
但列的数量会随着时间的推移而变化。
我想使这个动态,这样我就不必手动输入列名。
我使用的是oracle11g。

dtcbnfnu

dtcbnfnu1#

为了满足您的需求,所有的数据类型都应该是string,因为所有的列都是string。如果您的任何数据类型不是字符串,它将无法工作。例如:id列似乎是integer数据类型,如果您试图将id字符串合并到id列中,根据sql标准,它将失败。但是,如果相应表中的所有列都是字符串格式,则下面是解决方案。

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;
/
jm81lzqq

jm81lzqq2#

将您的列放入variable中,并将每次运行时得到的所有列连接起来..使用execute immediate执行,并将变量与语句连接起来

相关问题