2016-04-21 112 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(角色)。

请帮助。

回答

0

这似乎是很容易解决的不只是支点用case语句:

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

相关问题