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 28832 게시물 읽기
No. 28832
rollup 사용시 2건이상일때만 소계 보여주기.
작성자
오태훈(otaehun)
작성일
2006-11-23 16:47
조회수
2,847

안녕하세요.


rollup을 사용해서 소계를 내고자 하는데요..


예를 들어서

상품 금액

A      100

A      200

소계  300

B      300

C      200

C      500

소계  700


위처럼 해당 그룹내에 row가 2개이상일때는 소계를 뿌려주고,


B일때처럼 한 건 밖에 없을때는 소계를 


안 찍어주도록 할 방법이 쿼리에서 없을까요?


도와주시면 감사하겠습니다.

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

꽁수 일수도 있지만...
rollup 처리 해주시고
밖에서 한번더 group by 로 묶어 주시면 건수가 한건인건 하나로 묶어지 않을까요?

행동하자님이 2006-11-23 17:09에 작성한 댓글입니다. Edit

select name, num
from (
    select  code, decode(count(code), 1, code, '소계') name, sum(num) num, count(code) cnt, rownum rnum
    from (
        select 'C' code, 100 num from dual
        union all
        select 'A' code, 300 num from dual
        union all
        select 'B' code, 200 num from dual
        union all
        select 'A' code, 500 num from dual
        union all
        select 'C' code, 800 num from dual
    )
    group by code, rollup(rownum)
)
where cnt>1 or rnum is not null

 

전영식(garam111)님이 2006-11-23 17:29에 작성한 댓글입니다.

전영식님 쿼리를 약간 수정했습니다.

select  code, decode(count(code), 1, code, '소계') name, sum(num) num, count(code) cnt, rownum rnum

    from (

        select 'C' code, 100 num from dual

        union all

        select 'A' code, 300 num from dual

        union all

        select 'B' code, 200 num from dual

        union all

        select 'A' code, 500 num from dual

        union all

        select 'C' code, 800 num from dual

    )

    group by code, rollup(rownum)

 having count(code)>1 or rownum is not null

하루살이님이 2006-11-23 17:46에 작성한 댓글입니다. Edit

약간 더 변형해 보았습니다.

having 절에 or 연산을 피할 수 있겠죠.



with t as(

        select 'C' code, 100 num from dual

        union all

        select 'A' code, 300 num from dual

        union all

        select 'B' code, 200 num from dual

        union all

        select 'A' code, 500 num from dual

        union all

        select 'C' code, 100 num from dual

    )

SELECT   NVL2 (ROWNUM, code, '소계') code

       , SUM (num) num

    FROM t

GROUP BY code

       , ROLLUP (ROWNUM)

  HAVING COUNT (*) + NVL (ROWNUM, 0) > 1



http://www.soqool.com

SoQooL(김홍선)님이 2006-11-23 23:50에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
28835Table Data_length 관련 질문 [1]
맑은하늘
2006-11-23
1527
28834Primary Key Partitioned Index 생성방법 두개의 차이점 질문입니다.
은지호
2006-11-23
2158
28833월요일부터 시작하는 달력을 만들고 싶습니다. [3]
하종옥
2006-11-23
3747
28832rollup 사용시 2건이상일때만 소계 보여주기. [4]
오태훈
2006-11-23
2847
28831Export 받을 때 링크가 걸린 synonym의 원본 테이블도 export되나요? [2]
김보원
2006-11-23
1735
28830쿼리 질문인데요.. [2]
김태혁
2006-11-23
1377
28829게시판에서 답 글 순서 정하기
뱀무
2006-11-23
1499
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다