Oracle 11g を使用しているため、このUNPIVOT
機能を使用できます。これは列を取得して行に変換します。
select col_name , col_value
from
(
SELECT
forn.forn_old_codice_fornitura,
VOF.VOF_VOCE_FATTURABILE_COD,
IEF_ASSOGGETTAMENTO_COD,
ETA.ETA_CODICE_ASSOG,
CLU.CLU_CLASSE_FORNITURA_COD,
MVI.CLU_CLASSE_FORNITURA_COD,
ETA.ETA_USO_CLASSE_FORN,
MVI.MVI_FLG_SOGGETTO,
ETA.ETA_FLG_SOGGETTO,
[...]
)
unpivot
(
col_value
for col_name in (forn_old_codice_fornitura, VOF_VOCE_FATTURABILE_COD,
IEF_ASSOGGETTAMENTO_COD, ETA_CODICE_ASSOG, ...)
)
編集、列の長い名前で列の説明を生成したいというコメントに基づいて、これを行うには2つの方法があります。
1 つ目は、次のように、必要な列の説明にCASE
置き換える式を使用できます。col_name
select col_name,
col_value,
case col_name
when 'col1' then 'Test Col 1'
when 'col2' then 'Test Col 2'
when 'col3' then 'Test Col 3'
when 'col4' then 'Test Col 4'
end col_desc
from yourtable
unpivot
(
col_value
for col_name in (col1, col2, col3, col4)
) unp;
または、から列の説明への変換を含むテーブルを作成し、col_name
そのテーブルをアンピボット結果に結合できます。
select d.col_name,
d.col_value,
cd.col_desc
from
(
select col_name,
col_value
from yourtable
unpivot
(
col_value
for col_name in (col1, col2, col3, col4)
) unp
) d
inner join cd
on d.col_name = cd.col_name
両方のデモで SQL Fiddle を参照してください