TABLE 명 : T_TEST
T_NAME | T_VAL | T_ORD |
JONES | A1 | 1 |
JONES | A2 | 2 |
JONES | A3 | 3 |
JONES | A4 | 4 |
JONES | A5 | 5 |
JONES | A6 | 6 |
JONES | A7 | 7 |
CASEY | B1 | 11 |
CASEY | B2 | 12 |
CASEY | B3 | 13 |
CASEY | B4 | 14 |
CASEY | B5 | 15 |
원하는 결과값 .
T_NAME | COL1 | COL2 | COL3 | COL4 | COL5 |
JONES | A1 | A2 | A3 | A4 | A5 |
JONES | A6 | A7 | |||
CASEY | B1 | B2 | B3 | B4 | B5 |
SELECT T_NAME FROM T_TEST
GROUP BY T_NAME ASC
질문입니다.
가로를 세로를 정렬하고 싶은데 5개씩을 1기준으로 위와 같은 그림으로 정렬하려고 합니다.
JONES의 데이터는 7개, CASEY의 데이터는 5개가 있는데
값이 5개가 초과되면 위의 그림과 같이 두줄로 보여주려고 합니다.
고수님들의 답변 부탁드립니다.
WITH t_test AS ( SELECT 'JONES' t_name, 'A1' t_val, 1 t_ord FROM dual UNION ALL SELECT 'JONES', 'A2', 2 FROM dual UNION ALL SELECT 'JONES', 'A3', 3 FROM dual UNION ALL SELECT 'JONES', 'A4', 4 FROM dual UNION ALL SELECT 'JONES', 'A5', 5 FROM dual UNION ALL SELECT 'JONES', 'A6', 6 FROM dual UNION ALL SELECT 'JONES', 'A7', 7 FROM dual UNION ALL SELECT 'CASEY', 'B1', 11 FROM dual UNION ALL SELECT 'CASEY', 'B2', 12 FROM dual UNION ALL SELECT 'CASEY', 'B3', 13 FROM dual UNION ALL SELECT 'CASEY', 'B4', 14 FROM dual UNION ALL SELECT 'CASEY', 'B5', 15 FROM dual ) SELECT t_name , y , MIN(DECODE(x, 1, t_val)) col1 , MIN(DECODE(x, 2, t_val)) col2 , MIN(DECODE(x, 3, t_val)) col3 , MIN(DECODE(x, 4, t_val)) col4 , MIN(DECODE(x, 5, t_val)) col5 FROM (SELECT t_name, t_val , CEIL(rn / 5) y , MOD(rn - 1, 5) + 1 x FROM (SELECT t_name, t_val , ROW_NUMBER() OVER(PARTITION BY t_name ORDER BY t_ord) rn FROM t_test ) ) GROUP BY t_name, y ORDER BY t_name, y ; -- PIVOT 11G -- SELECT * FROM (SELECT t_name, t_val , CEIL(rn / 5) y , MOD(rn - 1, 5) + 1 x FROM (SELECT t_name, t_val , ROW_NUMBER() OVER(PARTITION BY t_name ORDER BY t_ord) rn FROM t_test ) ) PIVOT (MIN(t_val) FOR x IN (1, 2, 3, 4, 5)) ORDER BY t_name, y ;