何らかの値に基づいて列が可変であるクエリが必要なので、直接行うことはできません。あなたは何ができるか、わずかに異なる はあなたのクエリは、Oracleによって作成されたのは、動的SQLを構築している。
SETUP:
SQL> create table dataTable(q1,q2,q3) as
2 select 1,2,3 from dual union all
3 select 4,5,6 from dual
4 ;
Table created.
SQL> create table translationTable(descName, meanName) as
2 select 'q1', 'meaning1' from dual union all
3 select 'q2', 'meaning2' from dual union all
4 select 'q3', 'meaning3' from dual ;
Table created.
これは、作成し、クエリ印刷します:
SQL> declare
2 vSQL varchar2(1000);
3 begin
4 select listagg (column_name || ' AS "' || meanName || '"', ', ') within group (order by column_name)
5 into vSQL
6 from user_tab_columns col
7 inner join translationTable tr
8 on (upper(tr.descName) = col.column_name)
9 where table_name = upper('dataTable');
10 --
11 vSQL := 'select ' || vSQL || ' from dataTable';
12 dbms_output.put_line(vSQL);
13 end;
14/
select Q1 AS "meaning1", Q2 AS "meaning2", Q3 AS "meaning3" from dataTable
PL/SQL procedure successfully completed.
た場合をその文をコピーして実行します。
SQL> select Q1 AS "meaning1", Q2 AS "meaning2", Q3 AS "meaning3" from dataTable;
meaning1 meaning2 meaning3
---------- ---------- ----------
1 2 3
4 5 6
SQL>
このようにしてrクエリを使用できますが、まだ可変列があるため、フェッチできません。
このコードを簡単に編集して、文字列を返すクエリを作成できます。文字列を連結して構成します。あなたはいつも一つのフィールドを持っていますが、それはあなたが尋ねたものとは違っています:
SQL> select 'meaning1, meaning2, meaning3' from dual
2 union all
3 select Q1 || ',' || Q2 || ',' || Q3 from dataTable;
'MEANING1,MEANING2,MEANING3'
--------------------------------------------------------------------------------
meaning1, meaning2, meaning3
1,2,3
4,5,6
私は十分な言い訳をしていませんでした!問題と回答の両方をここで説明します: http://stackoverflow.com/questions/22309099/rename-columns-in-1-table-to-row-values-in-another-table – Dendrobates