|
SELECT ’Y’||GRO1 XY,
MIN(DECODE(GRO2,1,DECODE(CHK1+CHK2,2,NO))) X1,
MIN(DECODE(GRO2,2,DECODE(CHK1+CHK2,2,NO))) X2,
MIN(DECODE(GRO2,3,DECODE(CHK1+CHK2,2,NO))) X3,
MIN(DECODE(GRO2,4,DECODE(CHK1+CHK2,2,NO))) X4,
MIN(DECODE(GRO2,5,DECODE(CHK1+CHK2,2,NO))) X5,
MIN(DECODE(GRO2,6,DECODE(CHK1+CHK2,2,NO))) X6,
MIN(DECODE(GRO2,7,DECODE(CHK1+CHK2,2,NO))) X7,
MIN(DECODE(GRO2,8,DECODE(CHK1+CHK2,2,NO))) X8,
MIN(DECODE(GRO2,9,DECODE(CHK1+CHK2,2,NO))) X9,
MIN(DECODE(GRO2,0,DECODE(CHK1+CHK2,2,NO))) X10
FROM
(
SELECT NO,
TO_CHAR(CEIL(NO/10),’FM09’) GRO1,
MOD(NO,10) GRO2,
CASE WHEN NO BETWEEN 10*(RD_FR-(DECODE(RD_MOD,10,2,1)+PO_LV))+1 AND 10*(RD_FR+(DECODE(RD_MOD,10,1,2)+PO_LV))
THEN 1
ELSE 0 END CHK1,
CASE WHEN NO_MOD BETWEEN RD_MOD-:PO_LV AND RD_MOD+:PO_LV
THEN 1
ELSE 0 END CHK2
FROM
(
SELECT LEVEL NO,
DECODE(MOD(LEVEL,10),0,10,MOD(LEVEL,10)) NO_MOD,
FLOOR(:RD_NO/10) RD_FR,
DECODE(MOD(:RD_NO,10),0,10,MOD(:RD_NO,10)) RD_MOD,
:PO_LV-1 PO_LV
FROM DUAL
CONNECT BY LEVEL <= 100
)
)
GROUP BY GRO1
ORDER BY GRO1;
±×³É Á¶±Ý ´Ù¸£°Ô Ç®¾îºÃ½À´Ï´Ù.
SELECT GRO1,
REPLACE(XMLAGG(XMLELEMENT(NO,’ ’||NO) ORDER BY GRO2).EXTRACT(’//text()’).GetStringVal(),'#',' ') NUM
FROM
(
SELECT DECODE(CHK1+CHK2,2,NO,’###’) NO,
’Y’||GRO1 GRO1,
GRO2
FROM
(
SELECT TO_CHAR(NO,’FM099’) NO,
TO_CHAR(CEIL(NO/30),’FM09’) GRO1,
DECODE(MOD(NO,30),0,30,MOD(NO,30)) GRO2,
CASE WHEN NO BETWEEN 30*(RD_FR-(DECODE(RD_MOD,30,2,1)+PO_LV))+1 AND 30*(RD_FR+(DECODE(RD_MOD,30,1,2)+PO_LV))
THEN 1
ELSE 0 END CHK1,
CASE WHEN NO_MOD BETWEEN RD_MOD-:PO_LV AND RD_MOD+:PO_LV
THEN 1
ELSE 0 END CHK2
FROM
(
SELECT LEVEL NO,
DECODE(MOD(LEVEL,30),0,30,MOD(LEVEL,30)) NO_MOD,
FLOOR(:RD_NO/30) RD_FR,
DECODE(MOD(:RD_NO,30),0,30,MOD(:RD_NO,30)) RD_MOD,
:PO_LV-1 PO_LV
FROM DUAL
CONNECT BY LEVEL <= 30*30
)
)
)
GROUP BY GRO1;
|