2013-03-27 3 views
0

У меня длинный запрос, который генерирует некоторые значения. Имена идентификаторов слишком велики. И я предпочитаю иметь набор результатов в 2 столбцах, называемых «имя столбца» и «значение столбца».Транспонирование столбца с строками

IE для следующего запроса я хочу:

column name    column value 
forn_old_codice_fornitura *** 
VOF_VOCE_FATTURABILE_COD *** 
IEF_ASSOGGETTAMENTO_COD *** 

The *** является фактическим значением.

Как я могу это сделать?

SELECT 
     forn.forn_old_codice_fornitura, 

'Описание колонке 1', VOF.VOF_VOCE_FATTURABILE_COD, 'Колонка Описание 2', IEF_ASSOGGETTAMENTO_COD "треск Assog Нет", 'Описание Колонка 3' [...]

ответ

5

С вы используете 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, ...) 
) 

Edit, основанный на ваш комментарий, который вы хотите, чтобы сгенерировать описание столбца с длинным названием колонн, есть два способа, которые вы можете сделать это.

One, вы можете использовать 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 в колонке описание и вы присоединитесь к таблице на UNPIVOT результат:

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 with Demo обоих

+0

И если я хочу добавить третий столбец, содержащий длинное имя? То есть. col_name, col_value, col_description возможно – Revious

+1

@ Gik25 Откуда взялось описание столбца? – Taryn

+0

Я бы вставлял его в исходный запрос. Я изменю первоначальный пример, чтобы показать вам – Revious

Смежные вопросы