쿼리 결과를 Summary 하여 9999 값을 제외 후 정렬하려고 하는데 방법이 있을가요?
2번 결과와 같이 쿼리를 했으면 하는데 방법이 있는지 조언 부탁 드립니다.ㅠㅠ
1번
SU | MB | BG | IC | GG |
3007 | 9999 | 9999 | 9999 | 9999 |
3008 | 9999 | 9999 | 9999 | 9999 |
3009 | 9999 | 9999 | 9999 | 9999 |
3010 | 9999 | 9999 | 9999 | 9999 |
3011 | 9999 | 9999 | 9999 | 9999 |
9999 | 4001 | 9999 | 9999 | 9999 |
9999 | 4002 | 9999 | 9999 | 9999 |
9999 | 4003 | 9999 | 9999 | 9999 |
9999 | 4004 | 9999 | 9999 | 9999 |
9999 | 4005 | 9999 | 9999 | 9999 |
3012 | 9999 | 9999 | 9999 | 9999 |
3013 | 9999 | 9999 | 9999 | 9999 |
9999 | 4006 | 9999 | 9999 | 9999 |
9999 | 4007 | 9999 | 9999 | 9999 |
9999 | 9999 | 5001 | 9999 | 9999 |
9999 | 9999 | 5002 | 9999 | 9999 |
9999 | 9999 | 5003 | 9999 | 9999 |
9999 | 9999 | 5004 | 9999 | 9999 |
9999 | 9999 | 5005 | 9999 | 9999 |
9999 | 9999 | 5006 | 9999 | 9999 |
9999 | 9999 | 5007 | 9999 | 9999 |
9999 | 9999 | 5008 | 9999 | 9999 |
9999 | 9999 | 9999 | 1001 | 9999 |
9999 | 9999 | 9999 | 1002 | 9999 |
9999 | 9999 | 9999 | 1003 | 9999 |
9999 | 9999 | 9999 | 1004 | 9999 |
9999 | 9999 | 9999 | 1005 | 9999 |
9999 | 9999 | 9999 | 1006 | 9999 |
9999 | 4008 | 9999 | 9999 | 9999 |
9999 | 4009 | 9999 | 9999 | 9999 |
9999 | 4010 | 9999 | 9999 | 9999 |
9999 | 4011 | 9999 | 9999 | 9999 |
9999 | 9999 | 5009 | 9999 | 9999 |
9999 | 9999 | 5010 | 9999 | 9999 |
9999 | 9999 | 9999 | 9999 | 2001 |
9999 | 9999 | 9999 | 9999 | 2002 |
9999 | 9999 | 9999 | 9999 | 2003 |
9999 | 9999 | 9999 | 9999 | 2004 |
9999 | 9999 | 9999 | 9999 | 2005 |
9999 | 9999 | 9999 | 9999 | 2006 |
9999 | 9999 | 9999 | 9999 | 2007 |
9999 | 9999 | 9999 | 9999 | 2008 |
2번 결과
SU | MB | BG | IC | GG |
3007 | 4001 | 5001 | 1001 | 2001 |
3008 | 4002 | 5002 | 1002 | 2002 |
3009 | 4003 | 5003 | 1003 | 2003 |
3010 | 4004 | 5004 | 1004 | 2004 |
3011 | 4005 | 5005 | 1005 | 2005 |
3012 | 4006 | 5006 | 1006 | 2006 |
3013 | 4007 | 5007 | null | 2007 |
null | 4008 | 5008 | null | 2008 |
null | 4009 | 5009 | null | null |
null | 4010 | 5010 | null | null |
null | 4011 | null | null | null |
-- 그냥 좀 무식하게.. WITH T ( SU , MB , BG , IC )AS ( SELECT '3007' , '9999', '5001' , '1001' FROM DUAL UNION ALL SELECT '3008' , '4001', '9999' , '1002' FROM DUAL UNION ALL SELECT '3009' , '9999', '9999' , '9999' FROM DUAL UNION ALL SELECT '9999' , '9999', '9999' , '9999' FROM DUAL UNION ALL SELECT '9999' , '4002', '5002' , '9999' FROM DUAL ), T2 AS ( SELECT GREATEST( COUNT(CASE WHEN SU != '9999' THEN 1 END ) , COUNT(CASE WHEN MB != '9999' THEN 1 END ) , COUNT(CASE WHEN BG != '9999' THEN 1 END ) , COUNT(CASE WHEN IC != '9999' THEN 1 END ) )CNT FROM T ) SELECT A.VAL , B.VAL , C.VAL , D.VAL FROM ( SELECT ROWNUM RN FROM DUAL CONNECT BY LEVEL <= (SELECT CNT FROM T2) ) COPY_T ,( SELECT ROW_NUMBER() OVER(ORDER BY SU) RN , SU VAL FROM T WHERE SU != '9999' ) A ,( SELECT ROW_NUMBER() OVER(ORDER BY MB) RN , MB VAL FROM T WHERE MB != '9999' ) B ,( SELECT ROW_NUMBER() OVER(ORDER BY BG) RN , BG VAL FROM T WHERE BG != '9999' ) C ,( SELECT ROW_NUMBER() OVER(ORDER BY IC) RN , IC VAL FROM T WHERE IC != '9999' ) D WHERE COPY_T.RN = A.RN(+) AND COPY_T.RN = B.RN(+) AND COPY_T.RN = C.RN(+) AND COPY_T.RN = D.RN(+) ORDER BY COPY_T.RN