row가 아닌 column 누적 값 쿼리 ㅠ 도와주세요.. 0 6 3,583

by 손님 MODEL DIMENSION BY MEASURES RULES [2009.12.07 20:09:57]


bac1  |   bac2   |  bac3   |   bac4   |   bac5    | .......... |   bac48
   3            6            11             2            35                           10  

A라는 테이블의 레이아웃은 이렇습니다.


bac1  |   bac2   |    bac3   |          bac4   |           bac5    | .......................
  3            9               20                  22                     57
             (3+6)      (3+6+11)   (3+6+11+2)  (3+6+11+2+35)

 

근데 저는 이런 결과가 나오도록 쿼리를 짜야하는데

도저히 할 수가 없어요 ㅠ

컬럼으로 배치 되어 있는 것을 row로 바꾸고 sum()over()를 이용하여 누적합을 구한 후에

다시 row를 컬럼으로 치환하는 방법도 생각했으나 그렇게 하기엔 컬럼이 48개나 되어서요.

그리 좋은 방법은 아닌듯 싶습니다 ㅠ ( 쿼리가 깔끔하지 못하니까요 ㅠ)

 

깔끔하게 짤 수 있는 방법 없을까요 ?

고수님들 제발 도와주세요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

by 마농 [2009.12.07 22:42:39]
SELECT bac1
, bac1 + bac2 bac2
, bac1 + bac2 + bac3 bac3
, bac1 + bac2 + bac3 + bac4 bac4
, bac1 + bac2 + bac3 + bac4 + bac5 bac5
, ...
, bac1 + bac2 + bac3 + bac4 + bac5 + ... + bac48 bac48
FROM t
;

SELECT *
FROM t
MODEL
DIMENSION BY (ROWNUM rn)
MEASURES (bac1, bac2, bac3, bac4, bac5, ..., bac48)
RULES
( bac2[ANY] = bac2[CV()] + bac1[CV()]
, bac3[ANY] = bac3[CV()] + bac2[CV()]
, bac4[ANY] = bac4[CV()] + bac3[CV()]
, bac5[ANY] = bac5[CV()] + bac4[CV()]
, ...
, bac48[ANY] = bac48[CV()] + bac47[CV()]
)
;

by 글쓴이 [2009.12.08 09:41:55]
마농님 감사드립니다 ! +ㅁ+ 그런데 이곳 환경이 9i라서 10g부터 사용할 수 있는 Model 구문은 쓸 수가 없어요 ㅠ Model말고는 방법이 없는 것일까요 ?? 너무 어렵네요 ..ㅠㅠ

by 마농 [2009.12.08 09:50:04]
1번 방법 사용하세요.

by 글쓴이 [2009.12.08 10:11:46]
마농님 답변 감사드립니다 ! 아 ㅠ 1번 방법을 안쓰려고 머리를 굴리고 있는 중인데 방법이 없는걸까요 ;; ㅠ 카티션곱을 이용해서 jumping해서 구현하려고 해도 decode문이 너무 많이 들어 갈 것 같고 .. 컬럼이 48개라서 어떤방법이던 쉽지 않네요 ....

by finecomp [2009.12.08 13:17:49]
근본적으로 설계가 그런 문제를 야기한 겁니다...;

by 마농 [2009.12.08 13:23:47]
CREATE VIEW v
AS
SELECT bac1
, bac1 + bac2 bac2
, bac1 + bac2 + bac3 bac3
, bac1 + bac2 + bac3 + bac4 bac4
, bac1 + bac2 + bac3 + bac4 + bac5 bac5
, ...
, bac1 + bac2 + bac3 + bac4 + bac5 + ... + bac48 bac48
FROM t
;

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