오라클 각 Row의 합계를 구하고 싶습니다. 0 2 1,779

by 재동이_김재훈 [2016.11.16 18:58:16]


SELECT
    NVL(W_YEAR, 'totCnt') AS wYear
    , NVL(SUM(DECODE(C_CODE, '01' CNT)), 0) AS docCnt01
    , NVL(SUM(DECODE(C_CODE, '02' CNT)), 0) AS docCnt02
    , NVL(SUM(DECODE(C_CODE, '03' CNT)), 0) AS docCnt03
    , NVL(SUM(DECODE(C_CODE, '04' CNT)), 0) AS docCnt04
    , NVL(SUM(CNT), 0) AS docCnt05
FROM TB_TEMP
GROUP BY ROLLUP((W_YEAR, C_CODE))
 
1~4는 조건에 따른 합, 5는 각 Row의 합을 구하고 싶어서 요런식으로 쿼리를 짜 뒀었는데 문제는 
C_CODE의 값이 01~04가 아닌 경우도 있어서 docCnt05의 값이 제가 의도한 가로 합이 안 나오더라구요
 
가로 합을 구하려면 어떤 방법이 있을까요???
 
통계 부분 구현 중인데 여기는 항목이 4가지 정도지만 40개에 가까운 항목들도 있어서 어떻게 해야할지 막막합니다.
쿼리를 노가다로 짜거나 비즈니스 로직에서 처리를 해야 할지
 
아님 제가 완전 초짜라 알지 못 하는 획기적이고 뛰어난 방법이 있는지 잘 모르겠습니다. ㅠ.ㅠ 
 
by jkson [2016.11.17 12:17:21]

docCnt05는 docCnt01~4의 합으로 표시하시면 될 것 같고

살짝 쿼리를 더 줄이기 위해서는 pivot 같은 거 쓰시면 되겠지만

어차피 항목을 다 나열해야하는 건 마찬가지구요.

동적쿼리로 쿼리를 생성해도 되겠으나 항목이 유동적으로 증감하는 게

아니라면 가독성이나 관리적 측면으로 볼 때 그냥 쿼리를 만드시는 게 나을 것 같네요.

반복 패턴의 쿼리는 acroedit 같은 걸로 한방에 작성하시면 편하겠죠.

이외에 다른 획기적인 방법이 있을지 모르겠네요.


by 마농 [2016.11.18 09:17:44]

그룹바이 전에 조건으로 걸러내야죠.

WHERE c_code IN ('01', '02', '03', '04')

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