database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 7204 게시물 읽기
No. 7204
rollup관련해서 도와주세요 ㅜㅜ
작성자
JJ
작성일
2020-02-10 15:35ⓒ
2020-02-10 17:10ⓜ
조회수
1,937

 GROUPIN_ID와 ROLLUP을 이용하여 합계와 소계를 내려고 하는데 이중으로 들어가는 소계가 있어서

너무 어렵네요.. 도와주세요ㅜㅜ

 

SELCT

 

      GROUPING_ID(CASE WHEN SUBSTRING(A.NO_DEPT,2,1) <> 'X' THEN SUBSTRING(A.NO_DEPT,1,1) ELSE SUBSTRING(A.NO_DEPT,1,1)+'X' END) AS GROUP5    

, GROUPING_ID(A.NO_DEPT) AS GROUP2    

, GROUPING_ID(A.NO_DISP) AS GROUP3  

, GROUPING_ID(A.NM_DISP) AS GROUP4    

 

, A.NO_DEPT

, A.NO_DISP

, A.NM_DISP 

, (CASE WHEN A.SGP_ORD = 'Y' THEN 'SGP' ELSE CASE WHEN A.SGP_ORD = 'C' THEN 'KR' END END) AS SGP_ORD

,SUM(ORD) AS ORD

FROM #SIX_MONTH_GROUP A  

GROUP BY ROLLUP((A.H_DEPT), (A.H_DEPT, A.SGP_ORD),(CASE WHEN SUBSTRING(A.NO_DEPT,2,1)<>'X' THEN SUBSTRING(A.NO_DEPT,1,1) ELSE SUBSTRING(A.NO_DEPT,1,1)+'X' END),( A.NO_DEPT), (A.NO_DISP), (A.NM_DISP, A.SGP_ORD))

 

HAVING  

(GROUPING_ID(CASE WHEN SUBSTRING(A.NO_DEPT,2,1)<>'X' THEN SUBSTRING(A.NO_DEPT,1,1) ELSE SUBSTRING(A.NO_DEPT,1,1)+'X' END)=1) 

OR (GROUPING_ID(A.NO_DEPT) =1 AND A.H_DEPT LIKE '125%')

OR (GROUPING_ID(A.H_DEPT)=0 AND GROUPING_ID(A.NO_DEPT)=0 AND GROUPING_ID(A.NO_DISP)=0 AND GROUPING_ID(A.NM_DISP)=0)

위와 같은 쿼리로 작성된 결과는 아래와 같습니다.

H_DEPT|NO_DEPT|NO_DISP|NM_DISP 부분은 소계및 합게를 내기 위해 그룹지어지는 컬럼들입니다. (합계되는 컬럼들은 따로 있습니다. ) 이 컬럼 값들을 그룹을 지어 최종 소계나 합계를 내고 싶습니다.

 

<현재 출력>

H_DEPT|NO_DEPT|NO_DISP|NM_DISP

10|1A|1|가|KR

10|1A|2|나|KR

10|1A|2|나(계획분)|KR

10|1A|3|다|KR

10|1B|1|라|KR

10|1B|1|라(계획분)|KR

10|1B|2|마|KR

10|1C|1|바|KR

10|1C|1|바(계획분)|KR

10|1D|1|바|KR

10|1D|1|바(계획분)|KR

10|NULL|NULL|NULL|KR <- SGP_ORD 컬럼값이 KR인 부분으로 묶여 소계

10|1B|1|라|SGP

10|NULL|NULL|NULL|SGP <- SGP_ORD 컬럼값이 SGP인 부분으로 묶여 소계

10|NULL|NULL|NULL|NULL <- H_DEPT로 합계

20|2A|1|라|KR

20|2A|1|라(계획분)|KR

20|2B|1|라|KR

20|2B|1|라(계획분)|KR

20|2C|1|라|KR

20|2C|1|라(계획분)|KR

20|2D|1|라|KR

20|2D|1|라(계획분)|KR

20|2E|1|라|KR

20|NULL|NULL|NULL|KR <- SGP_ORD 컬럼값이 KR인 부분으로 묶여 소계

20|2X|1|PE|KR

20|2X|5|CDCA|KR

20|2X|7|CDCC|KR

20|NULL|NULL|NULL|KR <- SGP_ORD 컬럼값이 KR인 부분으로 묶여 소계

20|NULL|NULL|NULL|KR

20|2A|1|라|SGP

20|2B|1|라|SGP

20|2C|1|라|SGP

20|2D|1|라|SGP

20|2E|1|라|SGP

20|NULL|NULL|NULL|SGP <- SGP_ORD 컬럼값이 SGP인 부분으로 묶여 소계

20|NULL|NULL|NULL|SGP

20|NULL|NULL|NULL|NULL  <- H_DEPT로 합계

 

<원하는 출력>

H_DEPT|NO_DEPT|NO_DISP|NM_DISP

10|1A|1|가|KR

10|1A|2|나|KR

10|1A|2|나(계획분)|KR

10|1A|3|다|KR

10|1B|1|라|KR

10|1B|1|라(계획분)|KR

10|1B|1|라|SGP

10|1B|2|마|KR

10|1C|1|바|KR

10|1C|1|바(계획분)|KR

10|1D|1|바|KR

10|1D|1|바(계획분)|KR

10|NULL|NULL|NULL|KR <- SGP_ORD 컬럼값이 KR인 부분으로 묶여 소계

10|NULL|NULL|NULL|SGP <- SGP_ORD 컬럼값이 SGP인 부분으로 묶여 소계

10|NULL|NULL|NULL|NULL <- H_DEPT로 합계

20|2A|1|라|KR

20|2A|1|라(계획분)|KR

20|2A|1|라|SGP

20|2B|1|라|KR

20|2B|1|라(계획분)|KR

20|2B|1|라|SGP

20|2C|1|라|KR

20|2C|1|라(계획분)|KR

20|2C|1|라|SGP

20|2D|1|라|KR

20|2D|1|라(계획분)|KR

20|2D|1|라|SGP

20|2E|1|라|KR

20|2E|1|라|SGP

20|NULL|NULL|NULL|KR <- SGP_ORD 컬럼값이 KR인 부분으로 묶여 소계

20|NULL|NULL|NULL|SGP <- SGP_ORD 컬럼값이 SGP인 부분으로 묶여 소계

20|2X|1|PE|KR

20|2X|5|CDCA|KR

20|2X|7|CDCC|KR

20|NULL|NULL|NULL|KR <- 2X팀의 SGP_ORD 컬럼값이 KR인 부분으로 묶여 소계

20|NULL|NULL|NULL|KR <- H_DEPT 20이며 SGP_ORDRK KR인 값들의 합계

20|NULL|NULL|NULL|SGP <- H_DEPT 20이며 SGP_ORDRK SGP인 값들의 합계

20|NULL|NULL|NULL|NULL  <- H_DEPT로 합계

 

부탁드립니다! 감사합니다ㅜㅜ

 

이 글에 대한 댓글이 총 3건 있습니다.

출력물만 봐서는 그룹 구분 기준이 다 보이지 않네요.
합계 항목도 안보이구요.
그룹 기준과 합계 항목이 다 보이도록 질문해 주세요.

마농(manon94)님이 2020-02-10 16:12에 작성한 댓글입니다.

 다시 수정했습니다!  다시 부탁드립니다!

JJ님이 2020-02-10 17:11에 작성한 댓글입니다. Edit

WITH #six_month_group AS
(
SELECT 10 h_dept, '1A' no_dept, 1 no_disp, 'C' sgp_ord, 1 ord, '가' nm_disp
UNION ALL SELECT 10, '1A', 2, 'C', 1, '나'       
UNION ALL SELECT 10, '1A', 2, 'C', 1, '나(계획분)'
UNION ALL SELECT 10, '1A', 3, 'C', 1, '다'       
UNION ALL SELECT 10, '1B', 1, 'C', 1, '라'       
UNION ALL SELECT 10, '1B', 1, 'C', 1, '라(계획분)'
UNION ALL SELECT 10, '1B', 2, 'C', 1, '마'       
UNION ALL SELECT 10, '1C', 1, 'C', 1, '바'       
UNION ALL SELECT 10, '1C', 1, 'C', 1, '바(계획분)'
UNION ALL SELECT 10, '1D', 1, 'C', 1, '바'       
UNION ALL SELECT 10, '1D', 1, 'C', 1, '바(계획분)'
UNION ALL SELECT 10, '1B', 1, 'Y', 1, '라'       
UNION ALL SELECT 20, '2A', 1, 'C', 1, '라'       
UNION ALL SELECT 20, '2A', 1, 'C', 1, '라(계획분)'
UNION ALL SELECT 20, '2B', 1, 'C', 1, '라'       
UNION ALL SELECT 20, '2B', 1, 'C', 1, '라(계획분)'
UNION ALL SELECT 20, '2C', 1, 'C', 1, '라'       
UNION ALL SELECT 20, '2C', 1, 'C', 1, '라(계획분)'
UNION ALL SELECT 20, '2D', 1, 'C', 1, '라'       
UNION ALL SELECT 20, '2D', 1, 'C', 1, '라(계획분)'
UNION ALL SELECT 20, '2E', 1, 'C', 1, '라'       
UNION ALL SELECT 20, '2X', 1, 'C', 1, 'PE'       
UNION ALL SELECT 20, '2X', 5, 'C', 1, 'CDCA'     
UNION ALL SELECT 20, '2X', 7, 'C', 1, 'CDCC'     
UNION ALL SELECT 20, '2A', 1, 'Y', 1, '라'       
UNION ALL SELECT 20, '2B', 1, 'Y', 1, '라'       
UNION ALL SELECT 20, '2C', 1, 'Y', 1, '라'       
UNION ALL SELECT 20, '2D', 1, 'Y', 1, '라'       
UNION ALL SELECT 20, '2E', 1, 'Y', 1, '라'       
)
SELECT h_dept
--   , CASE SUBSTRING(no_dept, 2, 1) WHEN 'X' THEN 'X' ELSE 'W' END gb
     , no_dept, no_disp, nm_disp
     , CASE sgp_ord WHEN 'C' THEN 'KR' WHEN 'Y' THEN 'SGP' END sgp_ord
     , SUM(ord) ord
  FROM #six_month_group
 GROUP BY h_dept
     , CASE SUBSTRING(no_dept, 2, 1) WHEN 'X' THEN 'X' ELSE 'W' END
     , ROLLUP(sgp_ord, (no_dept, no_disp, nm_disp))
;

마농(manon94)님이 2020-02-11 10:35에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7207근접 값 찾기... [5]
초보초보
2020-02-17
2183
7206어려운 쿼리 문의 드립니다. 도와 주세요. [4]
초보초보
2020-02-13
2052
7205unpivot 관련 문의 [4]
초보초보
2020-02-12
1986
7204rollup관련해서 도와주세요 ㅜㅜ [3]
JJ
2020-02-10
1937
7203SQL 문의 .....ㅜㅜ [2]
도와주세요ㅜㅜ
2020-02-04
2089
7202마농님 글 감사 드립니다. 한번 더 혹시 봐 주실 수 있나요? [2]
도와주세요ㅜㅜ
2020-01-17
2173
7201SQL 문의..... [5]
도와주세요ㅜㅜ
2020-01-16
2124
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다