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 38445 게시물 읽기
No. 38445
쿼리 질문 올립니다. 답변좀 부탁드릴게요
작성자
쿼리질문
작성일
2011-03-17 16:15ⓒ
2011-03-17 16:16ⓜ
조회수
4,321

예를 들어 아래와 같은 로우데이타가 있읍니다.

그룹     코드       코드명     구분      금액
A         AA00     매출합계     0          0
A         AA01     과자류       1      1000
A         AA02     과일류       1      2000
A         AA03     음료류       1      1000
B         BB00     매출원가     0          0
B         BB01     과자류       1      500
B         BB02     과일류       1      1000
B         BB03     음료류       1      500
C         CC00      기타1       1       100
D         DD00      기타2       1       200
결과물
코드      코드명           합계
AA00     매출합계          4000
AA01     과자류             1000
AA02     과일류             2000
AA03     음료류             1000
BB00     매출원가          2000
BB01     과자류             500
BB02     과일류             1000
BB03     음료류             500
       이익금액             2000
CC00     기타1              100
DD00     기타2              200

 

혹시 위 의 데이타가 가능할가요? 일종의 손익계산서 비슷한 자료를 만들려고 하는데..
좋은생각이 떠오르질 안네요.  ROLLUP 사용할까도 생각해봣는데
그룹이 나올필요가 없는 데이타도 있고 해서..요..(CC00,DD00처럼요)

우선 관건은.. 구분이 0인곳의 금액 필드에 해당 그룹의 합계를 넣는 것입니다.

가능한건지. 제가 잘못 구현하고 있는건지..

아니면 비슷한 자료 만들기 위해 다른 방법을 강구해야 하는지요?
 

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

WITH t AS
(
SELECT 'A' grp, 'AA00' cd, '매출합계' nm, 0 gb, 0 amt FROM dual
UNION ALL SELECT 'A', 'AA01', '과자류'  , 1, 1000 FROM dual
UNION ALL SELECT 'A', 'AA02', '과일류'  , 1, 2000 FROM dual
UNION ALL SELECT 'A', 'AA03', '음료류'  , 1, 1000 FROM dual
UNION ALL SELECT 'B', 'BB00', '매출원가', 0,    0 FROM dual
UNION ALL SELECT 'B', 'BB01', '과자류'  , 1,  500 FROM dual
UNION ALL SELECT 'B', 'BB02', '과일류'  , 1, 1000 FROM dual
UNION ALL SELECT 'B', 'BB03', '음료류'  , 1,  500 FROM dual
UNION ALL SELECT 'C', 'CC00', '기타1'   , 1,  100 FROM dual
UNION ALL SELECT 'D', 'DD00', '기타2'   , 1,  200 FROM dual
)
SELECT grp
     , cd
     , NVL(nm, '이익금액') nm
     , CASE WHEN gb = 0 THEN SUM(SUM(amt)) OVER(PARTITION BY grp)
            WHEN GROUPING(grp) = 0 THEN SUM(amt)
            ELSE SUM(DECODE(grp, 'A', amt, 'B', -amt))
        END amt
  FROM t
 GROUP BY CASE WHEN grp IN ('A', 'B') THEN 1 ELSE 2 END
     , ROLLUP((grp, cd, nm, gb))
HAVING CASE WHEN grp IN ('A', 'B') THEN 1 ELSE 2 END = 1
    OR GROUPING(grp) = 0
 ORDER BY CASE WHEN grp IN ('A', 'B') THEN 1 ELSE 2 END, grp, cd
;

마농(manon94)님이 2011-03-17 18:27에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
38450쿼리 세로 출력 문의 [2]
초보입니다.
2011-03-18
4128
38449정규식 질문 드립니다. [1]
전현욱
2011-03-18
4331
3844864비트 windwos2008Server에 오라클 64비트/32비트 설치
Help!
2011-03-17
4136
38445쿼리 질문 올립니다. 답변좀 부탁드릴게요 [1]
쿼리질문
2011-03-17
4321
38443[질문]참조키 분석을 한꺼번에 볼수 있는지요
안동석
2011-03-17
3660
38442동일한 구조로 된 두 테이블간의 여집합 데이터 insert 작업 [2]
mongmong
2011-03-17
6894
38441공휴일을 제외한 일수 계산하기 [1]
도와주세요
2011-03-16
13122
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.025초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다