繁体   English   中英

如何在SQL中将单个表视为多个表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM