카테고리 없음
[해결]총계 소계를 정렬못하겠음
근우
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;