쿼리 질문 0 3 1,003

by 탑개발자 [SQL Query] [2014.05.30 18:25:39]


아래 형식으로 쿼리를 뽑고 싶은 데 소계 랑 합계 부분을 어떻게 해야 하는지 알려주세요 기준은 장비입니다.

 답변 부탁드립니다.

지역 장비 SCU1 SCU2 PIU1 PIU2 PIU3 PIU4 PIU5 PIU6
서울 A#1 GIB901 GIB901 GPB614 GPB614 GPB614 GPB614 GPB614 GPB614
서울 A#2 GIB901 GIB901 GPB614 GPB614 GPB614 GPB614 GPB614 GPB614
서울 A#3 GIB901 GIB901 GPB614 GPB614 GPB614 GPB614 GPB614 GPB614
소계 3 3 3 3 3 3 3 3 3
부산 A#1 GIB901 GIB901 GPB614 GPB614 GPB614 GPB614 GPB614 GPB614
부산 A#2 GIB901 GIB901 GPB614 GPB614 GPB614 GPB614 GPB614 GPB614
부산 A#3 GIB901 GIB901 GPB614 GPB614 GPB614 GPB614 GPB614 GPB614
소계 3 3 3 3 3 3 3 3 3
합계 6 6 6 6 6 6 6 6 6
by 비주류 [2014.05.30 23:41:49]

음, 소계와 합계의 계산 기준이 없어 애매하네요. (중복이라든지)

다소 지저분하지만 아래 SQL 참고하셔서 원하시는 조건에 맞게 수정하시면 될 것 같습니다.

SELECT "지역", "장비", "SCU1" -- , ... 나머지 ...
FROM   (
            SELECT DECODE(GROUPING_ID("지역"), 0, "지역") SEQ,
                   DECODE(GROUPING_ID("지역", "장비"), 0, "지역", 1, '소계', 3, '합계') "지역",
                   DECODE(GROUPING_ID("지역", "장비"), 0, "장비", COUNT(DISTINCT "지역" || "장비")) "장비",
                   DECODE(GROUPING_ID("지역", "장비"), 0, "SCU1", COUNT(DISTINCT "지역" || "장비")) "SCU1"
                   -- , ... 나머지 ... -- 
            FROM 테이블
            GROUP BY GROUPING SETS(("지역", "장비", "SCU1", "SCU2", "PIU1", "PIU2", "PIU3", "PIU4", "PIU5", "PIU6"), ("지역"), ())
        )
ORDER BY SEQ DESC NULLS LAST, "지역", "장비"

 


by 탑개발자 [2014.05.31 11:47:46]

답변 감사합니다.


by 마농 [2014.06.02 08:12:54]
SELECT NVL(지역, '합계') 지역
     , NVL(장비, COUNT(*)) 장비
     , scu1, scu2, piu1, piu2, piu3, piu4, piu5, piu6
  FROM t
 GROUP BY ROLLUP(지역, (장비, scu1, scu2, piu1, piu2, piu3, piu4, piu5, piu6))
;

 

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