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
운영게시판
최근게시물
Oracle Q&A 39288 게시물 읽기
No. 39288
rollup작업중에 막히네요....^^
작성자
빨간운동화
작성일
2012-02-13 16:44
조회수
4,819

롤업하다가 아래 내용을 어떻게 적당히 조합해볼려고 하는데 잘 되지 않습니다.

union all 등으로 된걸 모두 합치긴 했는데 중간중간에 합계 부분을 하기가 어렵습니다.

방법을 모르는건지........

롤업에 사용된 내용을 보면

ROLLUP  (B1, B2, B3, B4, BT), ITEM_NUM   이것과

ROLLUP  (B1, B2, B3, B4, BT, ITEM_NUM)  이것을 합쳐야 하는 상황이었습니다.

위의것은 B1,~ B4, BT 까지 ITEM_NUM 별로 소계가 나왔는데

아래 롤업같이  B1~ BT까지의 ITEM_NUM을 모은 합계가 나오질 안습니다.

도움을 요청합니다......

감사합니다.

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

1번 쿼리의 결과
2번 쿼리의 결과
최종 원하는 결과 를 비교해서 보여주면 이해하기 쉬울듯 합니다.
원하시는 바를 캐치하기 힘드네요.

마농(manon94)님이 2012-02-13 19:06에 작성한 댓글입니다.

B1 B2 B3 B4 BT ITEM_NUM COUNT  
1 01 011 631 0238 1 1  
1 01 011 631 0238 2 10  
1 01 011 631 0238 3 2  
            13 <-- 합계부분
1 01 011 631   1 21  
1 01 011 631   2 26  
1 01 011 631   3 7  
            54 <-- 합계부분
1 01 011     1 59  
1 01 011     2 75  
1 01 011     3 12  
            146 <-- 합계부분
1 01       1 288  
1 01       2 134  
1 01       3 28  
            450 <-- 합계부분
1         1 890  
1         2 109  
1         3 340  
            1339 <-- 합계부분
          1 1234  
          2 3241  
          3 792  
            5267 <-- 합계부분

합계부분으로 표시된 부분이 ROLLUP  (B1, B2, B3, B4, BT, ITEM_NUM) 로 나왔던 합계부분이고요

그리고 나머지 부분이 ROLLUP  (B1, B2, B3, B4, BT), ITEM_NUM  을 이용해서 추출된 결과입니다.

이둘을 합쳐서 위 표와 같은 결과를 얻고 싶습니다.  뭔가 2% 부족하다는 느낌에 죄송스럽게도

도움을 요청해봅니다.

그리고 답변 주셔서 많이 감사합니다.

감사합니다..

빨간운동화님이 2012-02-14 01:43에 작성한 댓글입니다. Edit

WITH t AS
(
SELECT '1' b1, '01' b2, '011' b3, '631' b4, '0238' bt, 1 item_num, 1 cnt FROM dual
UNION ALL SELECT '1', '01', '011', '631', '0238', 2,    10 FROM dual
UNION ALL SELECT '1', '01', '011', '631', '0238', 3,     2 FROM dual
UNION ALL SELECT '1', '01', '011', '631', '0239', 1,    20 FROM dual
UNION ALL SELECT '1', '01', '011', '631', '0239', 2,    16 FROM dual
UNION ALL SELECT '1', '01', '011', '631', '0239', 3,     5 FROM dual
UNION ALL SELECT '1', '01', '011', '632', '0238', 1,    38 FROM dual
UNION ALL SELECT '1', '01', '011', '632', '0238', 2,    49 FROM dual
UNION ALL SELECT '1', '01', '011', '632', '0238', 3,     5 FROM dual
UNION ALL SELECT '1', '01', '012', '632', '0238', 1,   229 FROM dual
UNION ALL SELECT '1', '01', '012', '632', '0238', 2,    59 FROM dual
UNION ALL SELECT '1', '01', '012', '632', '0238', 3,    16 FROM dual
UNION ALL SELECT '1', '02', '012', '632', '0238', 1,   602 FROM dual
UNION ALL SELECT '1', '02', '012', '632', '0238', 2,   206 FROM dual
UNION ALL SELECT '1', '02', '012', '632', '0238', 3,    81 FROM dual
UNION ALL SELECT '2', '02', '012', '632', '0238', 1,   344 FROM dual
UNION ALL SELECT '2', '02', '012', '632', '0238', 2,  2901 FROM dual
UNION ALL SELECT '2', '02', '012', '632', '0238', 3,   683 FROM dual
)
SELECT b1, b2, b3, b4, bt
     , item_num
     , SUM(cnt) cnt
  FROM t
 GROUP BY ROLLUP(b1, b2, b3, b4, bt), item_num
 UNION ALL
SELECT b1, b2, b3, b4, bt
     , Null item_num
     , SUM(cnt) cnt
  FROM t
 GROUP BY ROLLUP(b1, b2, b3, b4, bt)
 ORDER BY b1, b2, b3, b4, bt, item_num
;


또는


SELECT b1, b2, b3, b4, bt
     , item_num
     , SUM(cnt) cnt
  FROM (
        SELECT b1, b2, b3, b4, bt
             , item_num
             , SUM(cnt) cnt
          FROM t
         GROUP BY ROLLUP(b1, b2, b3, b4, bt), item_num
        )
 GROUP BY b1, b2, b3, b4, bt, ROLLUP(item_num)
 ORDER BY b1, b2, b3, b4, bt, item_num
;

마농(manon94)님이 2012-02-14 02:32에 작성한 댓글입니다.
이 댓글은 2012-02-14 02:33에 마지막으로 수정되었습니다.

무릎을 탁치는 방법이었습니다.

생각하는 방법이 아직 많이 부족한거 봅니다. ^^ (제 실력이 부족해서.......ㅎㅎ)

막힐때마다 여기서 해결합니다. 감사합니다.

두번째 방법으로 무사히 해결되었습니다.

 

빨간운동화님이 2012-02-14 17:59에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39291IN조건에 select사용시 INDEX를 못탑니다 [1]
김종구
2012-02-13
3930
39290특정기간 특정요일 갯수 구하기 질문 ㅠ.ㅠ [3]
진희
2012-02-13
5985
39289스키마 생성시 no logging에 대한 궁금증 [1]
슬라임
2012-02-13
3271
39288rollup작업중에 막히네요....^^ [4]
빨간운동화
2012-02-13
4819
39287가끔식 갑자기 느려지 쿼리 원인은? [2]
김지연
2012-02-13
3539
39285OCI 프로그램에서 OCI_NODATA 가 나옵니다.
나종현
2012-02-10
3762
39284특정 row 추출 조회하기. [2]
오종목
2012-02-10
3898
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다