TABLE 명 : T_TEST
T_NAME | T_VAL | T_VAL2 | T_VAL3 | T_ORD |
JONES | A1 | 10 | 가 | 1 |
JONES | A2 | 10 | 나 | 2 |
JONES | A3 | 15 | 가 | 3 |
JONES | A4 | 12 | 나 | 4 |
JONES | A5 | 12 | 가 | 5 |
JONES | A6 | 17 | 가 | 6 |
JONES | A7 | 11 | 가 | 7 |
CASEY | B1 | 8 | 다 | 11 |
CASEY | B2 | 3 | 다 | 12 |
CASEY | B3 | 4 | 다 | 13 |
CASEY | B4 | 4 | 라 | 14 |
CASEY | B5 | 0 | 라 | 15 |
원하는 결과값 .
T_NAME | COL1 | COL2 | COL3 | COL4 | COL5 |
JONES | A1 | A2 | A3 | A4 | A5 |
JONES | 10 | 10 | 15 | 12 | 12 |
JONES | 가 | 나 | 가 | 나 | 가 |
JONES | A6 | A7 | |||
JONES | 17 | 11 | |||
JONES | 가 | 가 | |||
CASEY | B1 | B2 | B3 | B4 | B5 |
CASEY | 8 | 3 | 4 | 4 | 0 |
CASEY | 다 | 다 | 다 | 라 | 라 |
질문입니다.
가로를 세로를 정렬하고 싶은데 5개씩을 1기준으로 위와 같은 그림으로 정렬하려고 합니다. 3ROW가 1세트입니다.
JONES | A1 | A2 | A3 | A4 | A5 |
JONES | 10 | 10 | 15 | 12 | 12 |
JONES | 가 | 나 | 가 | 나 | 가 |
첫번째 ROW에는 T_VAL1의 값이
두번째 ROW에는 T_VAL2의 값이
세번째 ROW에는 T_VAL3의 값이 조회되도록 위의 그림처럼 값이 나오면 됩니다.
고수님들의 답변 부탁드립니다
WITH t_test AS ( SELECT 'JONES' t_name, 'A1' t_val1, '10' t_val2, '가' t_val3, 1 t_ord FROM dual UNION ALL SELECT 'JONES', 'A2', '10', '나', 2 FROM dual UNION ALL SELECT 'JONES', 'A3', '15', '가', 3 FROM dual UNION ALL SELECT 'JONES', 'A4', '12', '나', 4 FROM dual UNION ALL SELECT 'JONES', 'A5', '12', '가', 5 FROM dual UNION ALL SELECT 'JONES', 'A6', '17', '가', 6 FROM dual UNION ALL SELECT 'JONES', 'A7', '11', '가', 7 FROM dual UNION ALL SELECT 'CASEY', 'B1', '8', '다', 11 FROM dual UNION ALL SELECT 'CASEY', 'B2', '3', '다', 12 FROM dual UNION ALL SELECT 'CASEY', 'B3', '4', '다', 13 FROM dual UNION ALL SELECT 'CASEY', 'B4', '4', '라', 14 FROM dual UNION ALL SELECT 'CASEY', 'B5', '0', '라', 15 FROM dual ) SELECT * FROM (SELECT t_name , t_val1, t_val2, t_val3 , CEIL(ROW_NUMBER() OVER(PARTITION BY t_name ORDER BY t_ord) / 5) y , MOD( ROW_NUMBER() OVER(PARTITION BY t_name ORDER BY t_ord) - 1, 5) + 1 x FROM t_test ) UNPIVOT (v FOR z IN (t_val1, t_val2, t_val3)) PIVOT (MIN(v) FOR x IN (1, 2, 3, 4, 5)) ORDER BY t_name, y, z ;
SELECT t_name , y, z , MIN(DECODE(x, 1, v)) c1 , MIN(DECODE(x, 2, v)) c2 , MIN(DECODE(x, 3, v)) c3 , MIN(DECODE(x, 4, v)) c4 , MIN(DECODE(x, 5, v)) c5 FROM (SELECT t_name , MOD(rn - 1, 5) + 1 x , CEIL(rn / 5) y , z , DECODE(z, 1, t_val1, 2, t_val2, 3, t_val3) v FROM (SELECT t_name , t_val1, t_val2, t_val3 , ROW_NUMBER() OVER(PARTITION BY t_name ORDER BY t_ord) rn FROM t_test ) , (SELECT LEVEL z FROM dual CONNECT BY LEVEL <= 3) ) GROUP BY t_name, y, z ORDER BY t_name, y, z ;