2016-04-21 3 views
0

У меня есть таблица в этом формате.Как преобразовать значения на основе строк в столбцы в oracle

РОЛИ ТАБЛИЦА:

USERID ROLE 
------ ----- 
    1  A 
    1  B 
    2  B 
    2  C 

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

USERID A B C 
------- --- --- --- 
    1  Y Y N 
    2  N Y Y 

Я попытался с помощью шарнира, но не получить точный результат. Вот что я пробовал,

SELECT * FROM 
(SELECT USERID,ROLE from ROLES) 
pivot(MAX(ROLE) for ROLE in ('A','B','C'))` 

Мне нужен Y/N. Думаю, мне нужно использовать некоторые декодированные развлечения вместо max (role).

ПОЖАЛУЙСТА, ПОМОГАЙТЕСЬ.

ответ

0

Вроде бы легко разрешимы без поворота просто использовать случай заявление:

SELECT USERID, 
     case when ROLE = 'A' then 'Y' else 'N' end, 
     case when ROLE = 'B' then 'Y' else 'N' end, 
     case when ROLE = 'C' then 'Y' else 'N' end 
    FROM ROLES 
0

Вы правы о необходимости расшифровывает, но вам нужно их в другом месте

select user_id,NVL2(A,'Y','N') "A",NVL2(B,'Y','N') "B",NVL2(C,'Y','N') "C"from (
    select user_id,role from roles 
) pivot(max(role) for role in ('A' as a,'B' as b,'C' as c)); 
+0

это не работает. – user3714162

+0

Что НЕ работает? Что вы получили за ошибку? – Baski

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