안녕하십니까!
현재 rollup 함수를 사용해서 계,소계,합계를 구하는 쿼리를 만들고있는데요..
결과는 문제없이 나오는데 소팅이 문제가 되네요...합계,소계,계를 구할때 Decode를 사용해서 하는데
해당 컬럼외에 다른 컬럼으로도 order by를 하고싶은데..방법이 있을까요;
해당 컬럼이 Group by에는 안들어가다 보니 order by에도 못들어가고....
SELECT DECODE(Z1.MON, NULL,'합계',Z1.MON) AS MON, DECODE(Z1.TEAM,NULL,'소계',MAX(Z1.TEAM)) AS TEAM,
DECODE(Z1.VOY_NO,NULL,'계',Z1.VOY_NO) AS VOY_NO
,DECODE(Z1.VOY_NO,NULL,' ',MAX(Z1.CTYPE)) AS CTYPE
, DECODE(Z1.VOY_NO,NULL,' ',MAX(Z1.VSLNM)) AS VSLNM
, DECODE(Z1.VOY_NO, NULL,' ',MAX(Z1.CHRRNM)) AS CHRRNM
,DECODE(Z1.VOY_NO,NULL,' ',MAX(Z1.BIZNM)) AS BIZNM
, DECODE(Z1.VOY_NO,NULL,' ',MAX(Z1.ST_DT)) || DECODE(Z1.VOY_NO,NULL,' ','~') ||DECODE(Z1.VOY_NO,NULL,' ',MAX(Z1.END_DT)) AS VOY_DT
FROM Z1,Z2
WHERE Z1.TEAM = Z2.TEAM
GROUP BY ROLLUP(Z1.MON, Z1.TEAM,Z1.VOY_NO)
ORDER BY Z1.MON, Z1.TEAM,Z1.VOY_NO
현재 이렇게 하면 문제없이 잘 나옵니다..
ORDER BY 마지막에 Z1.ST_DT순으로도 정렬을 하고싶은데..어떻게 해야할까요?
GROUP BY절에 ROLLUP 바깥에 해당 컬럼을 넣게 되면 VOY_NO 수만큼 계와 소계가 쭉~나오게 됩니다;;
그렇다고 Rollup안에 Z1.ST_DT를 넣게 되면 각 VOY_NO가 2개씩 중복되어 나옵니다.
해결방안 조언부탁드려요ㅜ.ㅜ
1. 주키가 되는 voy_no 에 종속되는 데이터들은 롤업사용시 주키와 함게 괄호로 묶어주세요.
2. NVL 을 사용할 위치에 복잡하게 DECODE 를 사용했네요.
3. Z2 는 아무데도 쓰이질 않는데 왜 조인했을까요?
SELECT NVL(z1.mon , '합계') AS mon , NVL(z1.team , '소계') AS team , NVL(z1.voy_no, '계' ) AS voy_no , NVL(z1.ctype , ' ' ) AS ctype , NVL(z1.vslnm , ' ' ) AS vslnm , NVL(z1.chrrnm, ' ' ) AS chrrnm , NVL(z1.biznm , ' ' ) AS biznm , NVL2(z1.st_dt, z1.st_dt||'~'||z1.end_dt, ' ') AS voy_dt FROM z1 -- , z2 -- WHERE z1.team = z2.team GROUP BY ROLLUP( z1.mon, z1.team , (z1.voy_no, z1.ctype, z1.vslnm, z1.chrrnm, z1.biznm, z1.st_dt, z1.end_dt) ) ORDER BY z1.mon, z1.team, z1.st_dt, z1.voy_no ;