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 21913 게시물 읽기
No. 21913
rollup 조회 기초...
작성자
아폴론(apollon)
작성일
2005-03-04 18:34ⓒ
2005-03-04 18:45ⓜ
조회수
4,771

select clcd, brcd, sum(amnt) amnt
from
(
-----------------------------------------------------------
select pm_clcd clcd, pm_brcd brcd,pm_amnt amnt
from me120t
where pm_pmyy||pm_pmmm between '200501' and '200501'
and pm_clcd in ('A0304')
------------------------------------------------------------1번
)
group by ROLLUP(clcd, brcd)


여기서 1번만 실행하면 데이터가 34row가 조회 됩니다.

전체를 실행하면
clcd --brcd --amnt
-------------------------------------------
A0304 --001 ---92389000
A0304 --005 ----3500000
A0304 --019 ---50000000
A0304 --021 ----1430000
A0304 --------147319000
--------------147319000

이렇게 그룹지어서 나타납니다.

group by ROLLUP(clcd, brcd) 이 구문이 들어가면 구룹지을 수 박에 없을 텐데요...
저는 1번을 실행한 결과 34row를 포함한 brcd 계, clcd계, 전체계를
나타내고 싶은데 종일을 해도 안되는군요... 흐미
rollup 넘 어려워... 저기에 복잡한 수식 들어가면 ㅋㅋㅋㅋ

쉽게 가르쳐 주시면 고맙겠습니다. 감사합니다

 

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

일단 원하시는게 불명확합니다.

중간 inview 안의 결과가 34개의 행을 반환하는데

단지 clcd와 brcd만을표현하고 금액이 나열된다면 그 금액을 구분해주는 컬럼이 표현되지 않는다는게 의미가 이상하구요

예를 들어

A0304 -- 001 -- 120300

A0304 -- 001 -- 225000

A0304 -- 001 -- 587500

A0304 -- 001 -- 200000

A0304 -- 001 -- 900000

A0304 -- 001계  2032800

A0304 -- 002 -- 120300

A0304 -- 002 -- 120300

...

A0304 -- 002계  2032800

...

A0304 계          994255244

...

....

총계               21255225252

뭐 대충 이런 식을 원하시는 건지?

 

만약 원하시는 것이 이런 것이라면

Grouping Set을 사용하시면 쉽게 해결이 됩니다.

단지 좀 이해가 안되는 것은 brcd 보다 더 행을 구분할 수 있는 컬럼이

표현 안되어 있다는 것이고 실제 업무에서 사용하신다면

좀 의미가 없는 조회 되겠습니다...

 

사설 빼고 방법은

group by grouping sets

( ( clcd,brcd,amnt),( clcd,brcd),(clcd),(1))

 

이렇게하면 됩니다.

 

단 제가 말씀 드렸듯이 clcd,brcd 뿐 아니라 행을 34개로 구분 지어주는 컬럼이 있어야 정확한 값이 나옵니다.

위의 예에서는 그런 컬럼이 없어서 대신 amnt를 사용하였습니다.

김흥수(protokhs)님이 2005-03-05 23:00에 작성한 댓글입니다.

혹시 grouping sets 을 사용하실 수 없는 버전의 오라클을

사용하신다면

위의 결과는 rollup으로도 가능하구요

제가

임시로 테이블을 만들어서 테스트 한 결과를 보내드리면요

테스트 테이블

CLCD BRCD OTHER_KEY AMNT
A0304 001 1 25211
A0304 001 2 5522
A0304 001 3 2552232
A0304 001 4 55222
A0304 001 5 55452
A0304 001 6 5554
A0304 001 7 555
A0304 001 8 44555
A0304 001 9 58455
A0304 001 10 5545552
A0304 001 11 4545252
A0304 002 1 552
A0304 002 2 5555
A0304 002 3 551222
A0304 002 4 552525
A0304 002 5 5452552
A0304 002 6 552544
A0304 002 7 5444552
A0304 002 8 55425
A0304 003 1 554255
A0304 003 2 55555
A0305 001 1 321321
A0305 002 1 65464
A0305 001 2 321655

 

 

SQL

SELECT
 case
  when GROUPing(A.BRCD) = 1 And GROUPing(A.CLCD) = 0 Then
   A.CLCD ||'계'
  When GROUPing(A.BRCD) = 0 Then
   A.CLCD
  Else
   '총계'
 End CLCD,
 case
  when GROUPing(A.AMNT) = 1 And GROUPing(A.BRCD) = 0 Then
   A.BRCD ||'계'
  When GROUPing(A.AMNT) = 0 Then
   A.BRCD
  Else
   Null
 End BRCD,
 SUM(A.AMNT) AMNT
FROM R_TABLE A
GROUP BY ROLLUP (A.CLCD ,A.BRCD , A.AMNT)

 

 

 

결과

CLCD BRCD AMNT
A0304 001 555
A0304 001 5522
A0304 001 5554
A0304 001 25211
A0304 001 44555
A0304 001 55222
A0304 001 55452
A0304 001 58455
A0304 001 2552232
A0304 001 4545252
A0304 001 5545552
A0304 001계 12893562
A0304 002 552
A0304 002 5555
A0304 002 55425
A0304 002 551222
A0304 002 552525
A0304 002 552544
A0304 002 5444552
A0304 002 5452552
A0304 002계 12614927
A0304 003 55555
A0304 003 554255
A0304 003계 609810
A0304계  26118299
A0305 001 321321
A0305 001 321655
A0305 001계 642976
A0305 002 65464
A0305 002계 65464
A0305계  708440
총계  26826739

김흥수(protokhs)님이 2005-03-05 23:49에 작성한 댓글입니다.

김흥수님의 답변을 보고 주물럭 주물럭 한 결과

이제는 어느정도 원하는 결과를  조회 할 수 있었습니다.


group by rollup(clcd,brcd,ilno)  이러면 최하위단위인

ilno 의 값은 그대로 나타나고(사실 이 ilno도 계를 낸다고 볼수

  있을까요?) 그다음 brcd 단위 계를 내고, 그다음 clcd계를 내고

  전체계를 내더군요.

만약 group by rollup(clcd,brcd,ilno) 여기에 코드명을 추가하면

-select 문 생략-

group by rollup(clcd,clnm,brcd,ilno) 

ilno 계(사실 이건 계인지?  그냥 개별 데이터인지?....)

brcd 계,clnm 계, clcd 계, 전체계   이렇게 계를 냅니다.

그러므로 결과적으로 clcd계가 두개나 보여지게 되지요

이 두개는 clcd와 clnm 이렇게 되더군요....흐흐

그러므로 select 절에서 Max()를 이용해서 group by 절에서 빼버려야

되더군요...

 

김흥수님 감사합니다. 행복하세요

 

 

아폴론(apollon)님이 2005-03-07 13:23에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
21916값들의 합이 0인 컬럼을 제외하기 ㅠ.ㅠ 부탁합니다 [5]
PolarBear
2005-03-04
2063
21915테이블 create시 테이블 영역 'SYSTEM'에 대한 권한이 없읍 에러 [1]
hho
2005-03-04
1536
21914오라클 에러에 대한 문의 [2]
김태진
2005-03-04
2441
21913rollup 조회 기초... [3]
아폴론
2005-03-04
4771
21912풀dmp파일을 imp 시킬경우 필요한 정보가...?! [3]
김규홍
2005-03-04
1603
21911특정 테이블의 조회가 느립니다. [7]
궁금
2005-03-04
6481
2191014379에 대한 연속질문.....부탁이요 [1]
김지명
2005-03-04
811
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다