쿼리 질문입니다 0 1 705

by 후인구 [2018.05.23 22:50:03]


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개가 초과되면 위의 그림과 같이 두줄로 보여주려고 합니다. 

 

고수님들의 답변 부탁드립니다.

 

by 마농 [2018.05.23 23:49:21]
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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입