[英]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.