ウィンドウ関数と条件付き集計を使用できます:
select
rn,
max(case when occupation = 'Doctor' then name end) doctor,
max(case when occupation = 'Singer' then name end) singer,
max(case when occupation = 'Actor' then name end) actor
from (
select t.*, row_number() over(partition by occupation order by name) rn
from mytable t
)
group by rn
サブクエリは、同じ職業を持つ人を名前でランク付けします。次に、その情報を使用して行を生成し、条件付き集計を使用して各職業に対応する名前にアクセスできます。
ウィンドウ関数がなければ、それは異なります。データが大きすぎない場合、1つのオプションはサブクエリで行番号をエミュレートします:
select
rn,
max(case when occupation = 'Doctor' then name end) doctor,
max(case when occupation = 'Singer' then name end) singer,
max(case when occupation = 'Actor' then name end) actor
from (
select t.*,
(
select count(*)
from mytable t1
where t1.occupation = t.occupation and t1.name <= t.name
) rn
from mytable t
)
group by rn