카테고리 없음

[해결]총계 소계를 정렬못하겠음

근우 2023. 7. 4. 14:10
SELECT * FROM(
                 SELECT CASE
                            WHEN GROUPING(MNG_CODE) = 1 THEN '총건수'
                            ELSE CASE WHEN GROUPING(MNG_CODE) = 0 AND Y.NO IS NULL THEN '소계' END
                            END AS MNG_CODE_SUM,
                        CASE
                            WHEN GROUPING(MNG_CODE) = 1 THEN COUNT(MNG_CODE)
                            ELSE CASE WHEN GROUPING(MNG_CODE) = 0 AND Y.NO IS NULL THEN COUNT(MNG_CODE) END
                            END AS STGT,
                        -- WHEN GROUPING(MNG_CODE) = 1 THEN NULL ELSE COUNT(*) END AS 소계및총건수,
                        --CASE WHEN Y.NO IS NOT NULL THEN NULL ELSE COUNT(MNG_CODE) END AS 소계및총건수,
                        Y.MNG_CODE,
                        Y.NO,
                        Y.MNG_SEQ,
                        MNG_COMPANY,
                        MNG_PERSON,
                        MNG_CONTACT,
                        MNG_SITE,
                        MNG_BG,
                        MNG_SYSTEM,
                        MNG_TYPE,
                        DBMS_LOB.SUBSTR(MNG_DESC_R, 200),
                        DBMS_LOB.SUBSTR(MNG_DESC_S, 200),
                        MNG_STATUS,
                        MNG_START,
                        MNG_CLOSE,
                        CREATE_DATE,
                        SAVE_DATE


                 FROM (SELECT ROW_NUMBER() OVER (ORDER BY MNG_CODE DESC) AS NO, X.*
                       FROM (SELECT MNG_CODE,
                                    MNG_SEQ,
                                    MNG_COMPANY,
                                    MNG_PERSON,
                                    MNG_CONTACT,
                                    MNG_SITE,
                                    MNG_BG,
                                    MNG_SYSTEM,
                                    MNG_TYPE,
                                    DBMS_LOB.SUBSTR(MNG_DESC_R, 200) AS MNG_DESC_R,
                                    DBMS_LOB.SUBSTR(MNG_DESC_S, 200) AS MNG_DESC_S,
                                    MNG_STATUS,
                                    MNG_START,
                                    MNG_CLOSE,
                                    CREATE_DATE,
                                    SAVE_DATE
                             FROM HD_MANAGE
                             WHERE MNG_CODE BETWEEN '20230626' AND '20230704' -- 기간 {startPeriod} {endPeriod}

                                --[전체]

                                --[검색어 입력없음]

                                -- AND MNG_SITE = '' -- SITE
                                -- AND MNG_BG = '' -- BG
                                -- AND MNG_SYSTEM = '' --SYSTEM
                                -- AND MNG_TYPE = '' -- TYPE
                                -- AND MNG_COMPANY = '' -- 상호
                                -- AND MNG_PERSON = '' -- 요청자
                                -- AND MNG_CONTACT = '' -- 연락처
                            ) X) Y
                 GROUP BY ROLLUP ((MNG_CODE),( Y.NO, MNG_CODE, MNG_SEQ, MNG_COMPANY, MNG_PERSON, MNG_CONTACT, MNG_SITE, MNG_BG,
                                   MNG_SYSTEM,
                                   MNG_TYPE, DBMS_LOB.SUBSTR(MNG_DESC_R, 200), DBMS_LOB.SUBSTR(MNG_DESC_S, 200), MNG_STATUS, MNG_START,
                                   MNG_CLOSE, CREATE_DATE, SAVE_DATE))
                 --ORDER BY MNG_CODE DESC


)
ORDER BY MNG_CODE DESC ;;;

목표하는바 : 총계가 마지막에 출력 , 소계는 각 MNG_CODE의 마지막에 출력 


SELECT Z.*,
       CASE
           WHEN MNG_CODE_SUM = '총건수' THEN 0
           WHEN MNG_CODE_SUM = '소계' THEN 1
           ELSE 2
           END AS NEW_COLUMN
FROM (
         SELECT
             CASE
                 WHEN GROUPING(MNG_CODE) = 1 THEN '총건수'
                 ELSE CASE WHEN GROUPING(MNG_CODE) = 0 AND Y.NO IS NULL THEN '소계' END
                 END AS MNG_CODE_SUM,
             CASE
                 WHEN GROUPING(MNG_CODE) = 1 THEN COUNT(MNG_CODE)
                 ELSE CASE WHEN GROUPING(MNG_CODE) = 0 AND Y.NO IS NULL THEN COUNT(MNG_CODE) END
                 END AS STGT,
             Y.MNG_CODE,
             Y.NO,
             Y.MNG_SEQ,
             Y.MNG_COMPANY,
             Y.MNG_PERSON,
             Y.MNG_CONTACT,
             Y.MNG_SITE,
             Y.MNG_BG,
             Y.MNG_SYSTEM,
             Y.MNG_TYPE,
             DBMS_LOB.SUBSTR(MNG_DESC_R, 200),
             DBMS_LOB.SUBSTR(MNG_DESC_S, 200),
             Y.MNG_STATUS,
             Y.MNG_START,
             Y.MNG_CLOSE,
             Y.CREATE_DATE,
             Y.SAVE_DATE
         FROM (
                  SELECT
                      ROW_NUMBER() OVER (ORDER BY MNG_CODE DESC) AS NO,
                      X.*
                  FROM (
                           SELECT
                               MNG_CODE,
                               MNG_SEQ,
                               MNG_COMPANY,
                               MNG_PERSON,
                               MNG_CONTACT,
                               MNG_SITE,
                               MNG_BG,
                               MNG_SYSTEM,
                               MNG_TYPE,
                               DBMS_LOB.SUBSTR(MNG_DESC_R, 200) AS MNG_DESC_R,
                               DBMS_LOB.SUBSTR(MNG_DESC_S, 200) AS MNG_DESC_S,
                               MNG_STATUS,
                               MNG_START,
                               MNG_CLOSE,
                               CREATE_DATE,
                               SAVE_DATE
                           FROM HD_MANAGE
                           WHERE MNG_CODE BETWEEN '20230626' AND '20230704'
                       ) X
              ) Y
         GROUP BY ROLLUP(
             Y.MNG_CODE,
             (Y.NO, Y.MNG_CODE, Y.MNG_SEQ, Y.MNG_COMPANY, Y.MNG_PERSON, Y.MNG_CONTACT, Y.MNG_SITE, Y.MNG_BG, Y.MNG_SYSTEM, Y.MNG_TYPE,
             DBMS_LOB.SUBSTR(MNG_DESC_R, 200), DBMS_LOB.SUBSTR(MNG_DESC_S, 200), Y.MNG_STATUS, Y.MNG_START, Y.MNG_CLOSE,
             Y.CREATE_DATE, Y.SAVE_DATE)
             )
     ) Z
ORDER BY CASE WHEN Z.MNG_CODE_SUM = '총건수' THEN 1 ELSE 0 END, MNG_CODE DESC, NEW_COLUMN DESC, NO DESC;