2013-10-09 8 views
1

Я новичок в оракуле. Это возможно?Oracle pivot operator

У меня есть две колонки Type и Value

type  value 
--------------- 
a  a1 
b  b1 
c  c1 
etc 

Смогу ли я получить что-то вроде этого, все в одной строке ??

a b c 
a1 b1 c1 

при попытке запроса, как это я получаю такой вывод

select A,B from tbl 
    pivot (max(value) for type in ('a' as A,'b' as B)) 

    ------------------------------------ 
    A B 
    null b1 
    a1 null 

Благодаря

+0

ли значение в 'type' известного набора? –

+0

Да, допустим, они просто a, b, c – cableload

ответ

4

Вы получаете выходные так просто, потому что вы выдаете select заявления против таблицы (ваш tbl стола), который предположительно содержит столбец (столбец первичного ключа, например), который однозначно идентифицирует строку и pivot оператора принимает в значение рассмотрения этой колонки. Вот простой пример:

/*assume it's your table tbl */ 
with tbl(unique_col, col1, col2) as(
    select 1, 'a', 'a1' from dual union all 
    select 2, 'b', 'b1' from dual union all 
    select 3, 'c', 'c1' from dual 
) 

Запрос против такой таблицы даст вам, что выходной (нежелательный выход) вы указали в вопросе:

select A,B 
    from tbl 
pivot(
    max(col2) for col1 in ('a' as A,'b' as B) 
) 

Результат:

A B 
-- -- 
a1 null 
null b1 

Чтобы получить желаемый результат, необходимо исключить столбец с уникальным значением для строки:

select A 
    , B 
    from (select col1 
      , col2 /*selecting only those columns we are interested in*/ 
      from tbl) 
    pivot(
    max(col2) for col1 in ('a' as A,'b' as B) 
) 

Результат:

A B 
-- -- 
a1 b1 
+0

Да, это сработало как шарм ... Спасибо за подробное объяснение, чтобы заставить меня понять разницу !!!!! – cableload

1

Что-то вроде этого:

SELECT a, b, c 
    FROM tbl 
PIVOT 
(
    MAX(Value) FOR Type IN ('a' as a, 
          'b' as b, 
          'c' as c) 
) 

Для получения более подробной информации вы можете обратиться к this документация.

+0

Как получить значение ??? добавление max (value) не работает? – cableload

+0

Что означает «max (value) did not work» означает? –

+0

Я не уверен, что понимаю синтаксис ... это то, что у меня есть: выберите 'a', 'b', 'c' из tbl pivot (max (значение) для типа in ('a', 'b', 'c')) – cableload