넵 마농 선생님 맞습니다.사실 기준을 못잡는거여서 헤매고 있었습니다.
user_id는 중복되지않으며 예를 들면
#############
1번 홍길동 3 4 5
2번 김철수 3 4 5
2번 장동건 2 4 6
2번 김범수 4 8 3
##############
이렇게 되있는 컬럼을
###############
1번 홍길동 3 4 5
2번 김철수 3 4 5 장동건 2 4 6 김범수 4 8 3
###############
이렇게 만들어서 출력 하고 싶었습니다.. 기준을 어떻게 잡아야 할지 도저히 떠오르지않더라구요,
그래서 그냥 테이블 나뉘어서 조인으로 해결 하긴 했습니다 ^^;
답변 주신거 정말 감사합니다.
-- Oracle -- WITH t AS ( SELECT '1번' id, '홍길동' nm, 3 q1, 4 q2, 5 q3 FROM dual UNION ALL SELECT '2번', '김철수', 3, 4, 5 FROM dual UNION ALL SELECT '2번', '장동건', 2, 4, 6 FROM dual UNION ALL SELECT '2번', '김범수', 4, 8, 3 FROM dual ) SELECT id , LISTAGG(nm ||' '|| q1 ||' '|| q2 ||' '|| q3, ' / ') WITHIN GROUP(ORDER BY nm) x FROM t GROUP BY id ;
WITH t AS ( SELECT '1번' id, '홍길동' nm, 3 q1, 4 q2, 5 q3 FROM dual UNION ALL SELECT '2번', '김철수', 3, 4, 5 FROM dual UNION ALL SELECT '2번', '장동건', 2, 4, 6 FROM dual UNION ALL SELECT '2번', '김범수', 4, 8, 3 FROM dual ) SELECT * FROM (SELECT id, nm , q1, q2, q3 , ROW_NUMBER() OVER(PARTITION BY id ORDER BY nm) rn FROM t ) PIVOT (MIN(nm) nm, MIN(q1) q1, MIN(q2) q2, MIN(q3) q3 FOR rn IN (1, 2, 3, 4)) ;
-- MySQL -- WITH t AS ( SELECT '1번' id, '홍길동' nm, 3 q1, 4 q2, 5 q3 UNION ALL SELECT '2번', '김철수', 3, 4, 5 UNION ALL SELECT '2번', '장동건', 2, 4, 6 UNION ALL SELECT '2번', '김범수', 4, 8, 3 ) SELECT id , GROUP_CONCAT(CONCAT_WS(' ', nm, q1, q2, q3) ORDER BY nm SEPARATOR ' / ') x FROM t GROUP BY id ; WITH t AS ( SELECT '1번' id, '홍길동' nm, 3 q1, 4 q2, 5 q3 UNION ALL SELECT '2번', '김철수', 3, 4, 5 UNION ALL SELECT '2번', '장동건', 2, 4, 6 UNION ALL SELECT '2번', '김범수', 4, 8, 3 ) SELECT id , MIN(CASE rn WHEN 1 THEN nm END) nm_1 , MIN(CASE rn WHEN 1 THEN q1 END) q1_1 , MIN(CASE rn WHEN 1 THEN q2 END) q2_1 , MIN(CASE rn WHEN 1 THEN q3 END) q3_1 , MIN(CASE rn WHEN 2 THEN nm END) nm_2 , MIN(CASE rn WHEN 2 THEN q1 END) q1_2 , MIN(CASE rn WHEN 2 THEN q2 END) q2_2 , MIN(CASE rn WHEN 2 THEN q3 END) q3_2 , MIN(CASE rn WHEN 3 THEN nm END) nm_3 , MIN(CASE rn WHEN 3 THEN q1 END) q1_3 , MIN(CASE rn WHEN 3 THEN q2 END) q2_3 , MIN(CASE rn WHEN 3 THEN q3 END) q3_3 , MIN(CASE rn WHEN 4 THEN nm END) nm_4 , MIN(CASE rn WHEN 4 THEN q1 END) q1_4 , MIN(CASE rn WHEN 4 THEN q2 END) q2_4 , MIN(CASE rn WHEN 4 THEN q3 END) q3_4 FROM (SELECT id, nm , q1, q2, q3 , ROW_NUMBER() OVER(PARTITION BY id ORDER BY nm) rn FROM t ) a GROUP BY id ;