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개)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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 ; |