특정 경우에만 레코드 개수를 늘릴수 있을까요? 0 2 2,028

by 야신 [SQL Query] SQL [2013.06.28 11:27:20]


특정 조건에서 그룹핑을 추가하여 INSERT 해야 하는 요구사항이 있습니다.
아래 데이타를 보시면 대분류코드가 A 인 경우 중분류 그룹을 한 값을 레코드로 추가생성해 주어야 한다.

대분류코드 중분류코드
A AA 1
A AB 4
A AB 2
A AB 1
B BB 3
B BB 2

분류코드
A 8
AA 1
AB 7
B 5

대분류를 한번하여 INSERT 와 대분류 A 조건을 가진 그룹핑 INSERT  이렇게 두번쓰거나 UNION ALL 을 이용하면 되긴하는데 한방에 해결할 수 있는 방법이 없을지 고민해 봅니다.
DW 라 데이타 건수가 많기 때문에 ( 기본 100만건정도 ) DUAL 을 이용한 레코드 뻥튀기 방법은 비효율적일것 같습니다.
by 아린 [2013.06.28 13:52:40]
ROLLUP 이나 CUBE 는 어떤가요?

WITH t(c1, c2, val) AS(
SELECT 'A', 'AA', 1 FROM dual UNION ALL
SELECT 'A', 'AB', 4 FROM dual UNION ALL
SELECT 'A', 'AB', 2 FROM dual UNION ALL
SELECT 'A', 'AB', 1 FROM dual UNION ALL
SELECT 'B', 'BB', 3 FROM dual UNION ALL
SELECT 'B', 'BB', 2 FROM dual UNION ALL
SELECT 'C', 'AB', 1 FROM dual UNION ALL
SELECT 'C', 'BB', 3 FROM dual
)
SELECT c2, val
  FROM (SELECT c1, NVL(DECODE(c1, 'A',c2, 'x'), c1) c2, SUM(val) val
          FROM t
         GROUP BY c1, CUBE(DECODE(c1, 'A',c2, 'x'))
        )
 WHERE c2 != 'x' 

by 야신 [2013.06.28 13:57:47]
아! 그런방법이 있을 수 있겠네요.
레코드를 늘려야 된다고만 생각하다 보니 그 생각을 못했네요.
감사합니다. 아린님. 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입