В общем, я думаю, что для этого требуется pl / sql и динамический SQL, как указано в @ gordon-linoff
Это очень близко.
Create table temp_sgc1(id number, column1 Varchar2(20), column2 varchar2(20));
Insert into temp_sgc1 values(1 , 'John' , 'Doe');
Insert into temp_sgc1 values(2 , 'Tom' , 'Baker');
Create table temp_sgc2(def_id number, mapped_column Varchar2(20), mapped_column_va
l
varchar2(20));
Insert into temp_sgc2 values(1, 'column1', 'First Name');
Insert into temp_sgc2 values(1, 'column2', 'Last Name');
Select * from
(select * from temp_sgc2
pivot (
max(mapped_column_val) for mapped_column in ( 'column1' column1, 'column2' column2 )
)
order by def_id)
union all
Select id, column1, column2
from temp_sgc1
;
РЕЗУЛЬТАТ:
DEF_ID COLUMN1 COLUMN2
1 First Name Last Name
1 John Doe
2 Tom Baker