db2 2개의 table을 join 시에 rollup 오류 질문 드립니다. 0 6 1,720

by 안녕하세요 [MySQL] db2 query error rollup join [2021.10.19 16:24:37]


SELECT 

 A.YYMM(년원), A.ACC(코드), B.ACC_NM(코드네임), A.DSC_ACC(상세코드), B.DSC_ACC_NM(상세코드네임), A.GNRL_COST(일반비), A.SALE_COST(영업비)

FROM DNU1 A

LEFT OUTER JOIN DNU2 B

ON A.ACC=B.ACC AND A.DSC_ACC=B.DSC_ACC

WHERE A.YYMM=$input.cYYMM

 

이 상황에서 A.YYMM의 값을 넣으면 잘 나옵니다.

 

테이블 맨 아래 컬럼에 일반비와 영업비의 합계를 구하고자 ROLLUP을 사용하려고 합니다. 

그러나 WHERE 절 밑에 GROUP BY BSYM WITH ROLLUP을 넣으면 Column ACC or expression in SELECT list not valid라고 오류가 뜹니다.

어떻게 해결해야 할까요?

by 마농 [2021.10.19 18:12:04]

ROLLUP 이 문제가 아닌 듯 합니다.
GROUP BY 에서 부터 문제가 있는 것 같은데요?
GROUP BY 기본 사용법에 어긋납니다.
GROUP BY 에 없는 항목이 Select 절에 집계함수 없이 직접 기술 불가합니다.


by 안녕하세요 [2021.10.20 08:57:57]

아 오타네요 GROUP BY BSYM 이 아니라 GROUP BY A.YYMM입니다 ㅠ


by 마농 [2021.10.20 10:03:21]

오타와 상관 없이 오류는 동일합니다.
그룹바이 기본 문법에 어긋납니다.
"GROUP BY 년월" 하려면 나머지 항목(코드, 코드명 등)은 SELECT 리스트에서 제거해야 합니다.


by 안녕하세요 [2021.10.20 10:34:43]

그럼 GRUOP BY ROLLUP을 사용해 합을 구하지 말고 UNION ALL로 합계 테이블을 만들어 처리해야겠군요


by 마농 [2021.10.20 10:56:21]

오라클의 롤업의 경우 이중괄호를 이용한 다양한 응용이 가능한데
WITH ROLLUP 구문은 그게 안되어 불편합니다.
GROUPING SETS 구문이 가능하면 사용하시면 되고, 아니면 UNION ALL 이 차라리 편할 수 있습니다.
다만 위 오류는 롤업과 상관없는 그룹바이 기본 오류로 보입니다.


by 안녕하세요 [2021.10.20 13:07:22]

감사합니다. GROUP BY 공부를 다시 해야겠어요

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입