ROLLUP? 중복 데이타 좀 도와 주세요 0 3 4,146

by 조성범 ROLLUP [2012.04.05 17:05:38]


WITH T AS
(
SELECT 'A' LI, '111' ID, 'AB' BA, 1300 QK, 15 SU, 21 QSU FROM DUAL
UNION ALL
SELECT 'A' LI, '111' ID,  'AC' BA, 100 QK, 15 SU, 21 QSU FROM DUAL
UNION ALL
SELECT 'A' L, '222' IDI, 'AB' BA, 1100 QK, 33 SU, 44 QSU FROM DUAL
UNION ALL
SELECT 'A' LI, '222' ID, 'AC' BA, 300 QK, 33 SU, 44 QSU FROM DUAL
UNION ALL
SELECT 'B' LI, '111' ID, 'AB' BA, 500 QK, 11 SU, 12 QSU FROM DUAL
UNION ALL
SELECT 'B' LI, '111' ID, 'AC' BA, 900 QK, 11 SU, 12 QSU FROM DUAL
)
SELECT
LI, ID, BA, SUM(QK) QK, SUM(SU) SU, SUM(QSU) QSU
FROM
T
GROUP BY ROLLUP(LI, ID, BA)
HAVING GROUPING_ID(LI,ID,BA) IN ('0','3','7')
보고 싶은 형태
A | 111 | AB | 1300 | 15 | 21
A | 111 | AC | 100 | 15 | 21
A | 222 | AB | 1100 | 33 | 44
A | 222 | AC | 300 | 33 | 44
합계 | 2 | 빈값임 | 2800 | 48 | 65
B | 111 | AB | 500 | 11 | 12
B | 111 | AC | 900 | 11 | 12
합계 | 1 | 빈값임  | 1400 | 11 | 12

ROLLUP이랑  GROUPING_ID 이용해서 해서 하긴 해봤는데요
합계 부분에서 젤 끝 2개의 컬럼 데이타는
A, 111 기준으로 SUM합 결과 값을 얻고 싶거든요
근데 그게 잘 안되네요

쉽게 말하면...
A | 111 | AB | 1300 | 15 | 21
A | 111 | AC | 100 | 15 | 21
A | 222 | AB | 1100 | 33 | 44
A | 222 | AC | 300 | 33 | 44
합계 | 2 | 빈값임 | 2800 | 48 | 65

여기에서 2는 111, 222 2개의 중복데이타를 하나씩만 COUNT시켜서 2개로 표시 한거구요
2800은 1300 + 100 + 1100 + 300 더한 값입니다.
48은 15 + 33 한 값입니다 중복 데이타 하나씩만 더한거죠
65 도 마찬가지로 중복 데이타 하나씩만 더한겁니다


좀 도와 주세요
부탁 드립니다.

by 손님 [2012.04.05 17:34:04]
DECODE(ID,NULL,COUNT(DISTINCT ID) OVER(PARTITION BY LI),ID) AS ID
,SUM(DISTINCT SU) SU
,SUM(DISTINCT QSU) QSU

아무 조건없이 중복인거 한번만 하실려면 이렇게 하시면 되겠네영.

by 마농 [2012.04.05 17:38:46]
WITH t AS
(
SELECT 'A' li, '111' id, 'AB' ba, 1300 qk, 15 su, 21 qsu FROM dual
UNION ALL SELECT 'A', '111', 'AC',  100, 15, 21 FROM dual
UNION ALL SELECT 'A', '222', 'AB', 1100, 33, 44 FROM dual
UNION ALL SELECT 'A', '222', 'AC',  300, 33, 44 FROM dual
UNION ALL SELECT 'B', '111', 'AB',  500, 11, 12 FROM dual
UNION ALL SELECT 'B', '111', 'AC',  900, 11, 12 FROM dual
)
SELECT li
     , NVL(id, COUNT(DISTINCT id)) id
     , NVL(ba, '합계') b
     , SUM(qk) qk
     , SUM(DISTINCT su) su
     , SUM(DISTINCT qsu) qsu
  FROM t
 GROUP BY li, ROLLUP((id, ba))
 ORDER BY t.li, t.id
;
보고싶은 형태에 전체합계는 없어서 전체합계 안나오게 했습니다.

by 손님 [2012.04.06 08:08:24]

감사합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입