아래와 같은 수강신청 테이블이 있을때,
학생명 | 과목 |
A | mat |
B | eng |
C | kor |
D | eng |
E | mat |
F | kor |
G | mat |
이렇게 되어 있을때,
쿼리를 사용해서 아래와 같이 출력하게 할수있을까요?
아~ MySql사용중입니다.
mat | eng | kor |
A | B | C |
E | D | F |
G |
물론,
SELECT 학생명 FROM 수강신청 WHERE 과목명 = 'mat'; SELECT 학생명 FROM 수강신청 WHERE 과목명 = 'eng'; SELECT 학생명 FROM 수강신청 WHERE 과목명 = 'kor';
이렇게 3번쿼리를 날리면 되긴한데 , 한번의 쿼리로 가능하지 않을까 싶어서요.
아~ 학생이 같은 과목을 두번신청하지는 않습니다.
WITH t AS ( SELECT 'A' id, 'mat' subj UNION ALL SELECT 'B', 'eng' UNION ALL SELECT 'C', 'kor' UNION ALL SELECT 'D', 'eng' UNION ALL SELECT 'E', 'mat' UNION ALL SELECT 'F', 'kor' UNION ALL SELECT 'G', 'mat' ) SELECT rn , MIN(CASE subj WHEN 'mat' THEN id END) mat , MIN(CASE subj WHEN 'eng' THEN id END) eng , MIN(CASE subj WHEN 'kor' THEN id END) kor FROM (SELECT id, subj , ROW_NUMBER() OVER(PARTITION BY subj ORDER BY id) rn FROM t ) a GROUP BY rn ;