2017-06-07 8 views
0

Ich kam in dieser SQL-Herausforderung von Hackerrank.com Probe Input:wie eine einzige Tabelle als mehrere Tabellen in SQL behandeln

select * from occupation 

Beispielausgabe:

Name  Occupation  
samantha doctor 
jenny  doctor 
julia  actor 
maria  actor 
jane  actor 
meera  singer 
priya  singer 
ashley  professor 
ketty  professor 
christeen professor 

ausgegeben werden soll :(Arzt, Professor, Sänger, Schauspieler bestellen auch nach Namen)

jenny  ashley   meera  jane 
samantha christeen  priya  julia 
null  ketty   null  maria 

Was ich versucht habe ist:

SELECT DECODE(occupation,'doctor',name,NULL ),DECODE(occupation,'professor',name,NULL),DECODE(occupation,'singer',name,NULL) , 
DECODE(occupation , 'actor',name,NULL) 
FROM occupation ; 

Aber es doesnot gibt mir gewünscht result.Also Ich habe dies versucht:

SELECT oc1.name , 
oc2.name,oc3.name,oc4.name 
FROM 
(SELECT name,occupation FROM occupation WHERE occupation = 'doctor' 
) oc1 , 
(SELECT name,occupation FROM occupation WHERE occupation = 'actor' 
) oc2 , 
(SELECT name,occupation FROM occupation WHERE occupation = 'singer') oc3, 
(SELECT name,occupation FROM occupation WHERE occupation = 'professor')oc4 , occupation oc 

WHERE 
oc1.occupation= oc.occupation(+) 
and oc2.occupation = oc.occupation(+) 
AND oc3.occupation  = oc.occupation(+) 
AND oc4.occupation  = oc.occupation(+); 

Aber es gibt doppelten Datensätze. Kann mir jemand bitte

Dank helfen

Antwort

2

eine PIVOT Verwendung:

SELECT doctor, professor, singer, actor 
FROM (
    SELECT o.*, 
     ROW_NUMBER() OVER (PARTITION BY occupation ORDER BY name) AS rn 
    FROM occupation o 
) 
PIVOT (MAX(name) FOR Occupation IN (
    'doctor' AS doctor, 
    'actor'  AS actor, 
    'singer' AS singer, 
    'professor' AS professor 
)) 
ORDER BY rn; 
Verwandte Themen