[英]how to treat a single table as multiple tables in sql
我从Hackerrank.com示例输入遇到了这个SQL挑战:
select * from occupation
样本输出:
Name Occupation
samantha doctor
jenny doctor
julia actor
maria actor
jane actor
meera singer
priya singer
ashley professor
ketty professor
christeen professor
输出应为:(医生,教授,歌手,演员也应按姓名排序)
jenny ashley meera jane
samantha christeen priya julia
null ketty null maria
我试过的是:
SELECT DECODE(occupation,'doctor',name,NULL ),DECODE(occupation,'professor',name,NULL),DECODE(occupation,'singer',name,NULL) ,
DECODE(occupation , 'actor',name,NULL)
FROM occupation ;
但这并没有给我想要的结果。
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(+);
但是它给出了重复的记录。 有人可以帮帮我吗
谢谢
使用PIVOT
:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.