2016-04-21 111 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

相關問題