다음은 집계를 사용하는 방법입니다. 아마도 가장 쉬운 방법 일 것입니다.
select max(case when class = 'a' then name end) as a,
max(case when class = 'b' then name end) as b,
max(case when class = 'c' then name end) as c
from (select name, class, row_number() over (partition by class order by (select NULL)) as seqnum
from nameclasses
) nc
group by seqnum
order by seqnum;
이것은 내가 게시 한 원래의 방법입니다. 그것은 집계를 사용하지 않지만, 많은 조인 않습니다
이
select a.name as a, b.name as b, c.name as c
from (select name, row_number() over (order by (select NULL)) as seqnum
from nameclasses nc
where class = 'A'
) a full outer join
(select name, row_number() over (order by (select NULL)) as seqnum
from nameclasses nc
where class = 'B'
) b
on a.seqnum = b.seqnum full outer join
(select name, row_number() over (order by (select NULL)) as seqnum
from nameclasses nc
where class = 'c'
) c
on c.seqnum = coalesce(a.seqnum, b.seqnum)
order by coalesce(a.seqnum, b.seqnum, c.seqnum);
피벗 테이블이 필요합니다. 얼마나 많은 수업이 있는지 모를 경우 동적 피벗 테이블을 찾을 수 있습니다. 그래서 http://sqlhints.com/2014/03/18/dynamic-pivot-in-sql-server/ –