Rollup 통해 소계,합계를 구했는데 임시테이블 저장시 정렬이... 0 4 3,168

by DJ메탈짱™ [어플리케이션관련] [2009.12.09 00:22:55]


아래와 같이 임시로 만들어봤는데요... 실제 데이터가 너무 많아 매일 배치로 돌리는 프로그램을 만들었는데요.
select한 결과를 집계 테이블에 저장한 후 실제 화면에서는 집계테이블을 select 하는 방식으로 했습니다.
일별로 데이터를 구성해야 하는데....
근데 이상한 현상이 있어서...문의 드립니다. 

        insert into bhchoi

        WITH RESULT AS (

            SELECT ’매장’ AA,     ’건대’     BB, 100 CC, 100 DD FROM DUAL UNION ALL

            SELECT매장’ AA,     ’역삼’     BB, 200 CC, 200 DD FROM DUAL UNION ALL

            SELECT마트’ AA,     ’종로’     BB, 300 CC, 300 DD FROM DUAL UNION ALL

            SELECT마트’ AA,     ’삼성’     BB, 400 CC, 400 DD FROM DUAL UNION ALL

            SELECT온라인’ AA, ’온라인’ BB, 500 CC, 500 DD FROM DUAL

        )

        SELECT

            DECODE(GROUPING_ID(AA,BB),’1’,’소계’,’3’,’합계’,AA) AA

            , BB, SUM(CC)CC, SUM(DD) DD FROM RESULT

        GROUP BY ROLLUP(AA,BB)

       

        SELECT * FROM bhchoi

 

위의 쿼리에서 select만 하는 경우에는 문제가 없는데

insert 를 하게 되면 항목,항목별소계,합계 의 정렬이 변하게 되어 값이 이상하게 나와버리네요...


이러한 경우에는 어찌하면 좋을지 조언좀 부탁드립니다... (__)

by 마농 [2009.12.09 09:26:38]
인서트시에 데이터는 입력된 순서대로 들어가지 않습니다.
임의의 빈 자리를 찾아서 들어가게 되죠.
정렬을 원하신다면 따로 정렬을 하셔야 합니다.
정렬 기준이 없다면 따로 정렬 기준 컬럼을 만들어 놓으셔야 하구요.

by 마농 [2009.12.09 10:17:03]
aa 항목을 그냥 소계로 표시하면 이게 어떤 값의 소계인지 데이터만 봐서는 알수가 없습니다.
aa 는 그대로 둔채 bb 를 소계로 표시하세요.

by DJ메탈짱™ [2009.12.10 09:29:59]
말씀해주신것에 대해 힌트를 얻어서 처리했네요. 감사합니다 ^^*

by DJ메탈짱™ [2009.12.17 14:57:28]
말씀해주신대로라면 아래와 같이 해야겠네요 ^^; 다시한번 감사드립니다.

WITH RESULT AS (
SELECT '매장' AA, '건대' BB, 100 CC, 100 DD FROM DUAL UNION ALL
SELECT '매장' AA, '역삼' BB, 200 CC, 200 DD FROM DUAL UNION ALL
SELECT '마트' AA, '종로' BB, 300 CC, 300 DD FROM DUAL UNION ALL
SELECT '마트' AA, '삼성' BB, 400 CC, 400 DD FROM DUAL UNION ALL
SELECT '온라인' AA, '온라인' BB, 500 CC, 500 DD FROM DUAL
)
SELECT
AA
, DECODE(GROUPING_ID(AA,BB),'1','소계','3','합계',BB), SUM(CC)CC, SUM(DD) DD FROM RESULT
GROUP BY ROLLUP(AA,BB)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입