p_to : 240
NAME HGROUP LGROUP ITEM
해병 H1 1 Pam
해병 H2 2 Cm
해병 H2 3 Das
해병 H3 5 IPaq
해병 H4 6 Goal
해병 H4 7 Leg
해병 H6 8 Power
해병 H6 9 Stick
해병 H7 10 Mental
...........
해병 H10 N Siru
이런데이터가 있는데요
HGROUP은 10개가 고정입니다 (HGROUP은 비어있거나 중복이 될 수 있지만 10개가 MAX)
LGROUP은 중간에 빈값이 있을 수 있습니다. (LGROUP은 N개까지)
가로로 나열 시
HGROUP은 비어 있으면 "X다음순번" 로 표기가 되어야 됩니다.
LGROUP은 비어 있으면 "X다음순번" 로 표기가 되어야 됩니다.
HGROUP부분 LGROUP부분
___________________________ ___________________________
해병 H1 H2 H3 H4 X5 H6 .... H10 1 2 3 X4 5 6 7 8 9 .... N
p_to 값에 따라 N이 늘어납니다. 만약 240이면 LGROUP은 1에서 240까지가 가로로 쭉 나열 되어야 됩니다.
이름 HGROUP(무조건10개) LGROUP(N개)
WITH data_t AS ( SELECT '해병' name, 'H1' hgroup, 1 lgroup, 'Pam' item FROM dual UNION ALL SELECT '해병', 'H2' , 2, 'Cm' FROM dual UNION ALL SELECT '해병', 'H2' , 3, 'Das' FROM dual UNION ALL SELECT '해병', 'H3' , 5, 'IPaq' FROM dual UNION ALL SELECT '해병', 'H4' , 6, 'Goal' FROM dual UNION ALL SELECT '해병', 'H4' , 7, 'Leg' FROM dual UNION ALL SELECT '해병', 'H6' , 8, 'Power' FROM dual UNION ALL SELECT '해병', 'H6' , 9, 'Stick' FROM dual UNION ALL SELECT '해병', 'H7' , 10, 'Mental' FROM dual UNION ALL SELECT '해병', 'H10', 11, 'Siru' FROM dual UNION ALL SELECT '해병', 'H10', 24, 'Siru' FROM dual UNION ALL SELECT '육군', 'H1' , 1, 'aaaa' FROM dual ) SELECT h.name , h.hgroup , l.lgroup FROM (SELECT b.name , LISTAGG(NVL(b.hgroup, 'X'||a.lv), ' ') WITHIN GROUP(ORDER BY a.lv) hgroup FROM (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 10) a LEFT OUTER JOIN (SELECT DISTINCT name, hgroup FROM data_t) b PARTITION BY (b.name) ON 'H'||a.lv = b.hgroup GROUP BY b.name ) h , (SELECT b.name , LISTAGG(NVL(b.lgroup||'', 'X'||a.lv), ' ') WITHIN GROUP(ORDER BY a.lv) lgroup FROM (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 12) a -- :p_to LEFT OUTER JOIN data_t b PARTITION BY (b.name) ON a.lv = b.lgroup GROUP BY b.name ) l WHERE h.name = l.name ;