행추가 쿼리 질문입니다. 1 11 1,599

by 해도지 [SQL Query] query [2015.08.28 09:41:16]


년월 항목 이벤트
201507 단가 1000
  금액 10000
  금액/단가  
201508 단가 2000
  금액 20000
  금액/단가  

위와 같은 결과를 만들고 싶은데

중간에 금액/단가 행은 DB에 없고 위 값을 가지고 계산해야 하는데...

쿼리로 가능한가요?

by 개발뉴비 [2015.08.28 09:44:00]

GROUPING을 이용해서 하시는 것도 괜찮을 것 같네요.

http://www.gurubee.net/lecture/2679


by 해도지 [2015.08.28 10:42:15]

sum이 아니라

금액을 단가로 나눈값. 추가되어야 합니다.


by 개발뉴비 [2015.08.28 11:16:44]

금액과 단가가 각 월별 한 Row씩만 나오는건가요?


by 해도지 [2015.08.28 11:21:21]

네 그렇습니다.


by 신이만든짝퉁 [2015.08.28 12:16:19]

원하시는 데이터가 이게 맞나 모르겠네요.

WITH T AS
     (SELECT '201507' YM, '단가' COL1, 1000 COL2
        FROM DUAL
      UNION ALL
      SELECT '201507' YM, '금액' COL1, 10000 COL2
        FROM DUAL
      UNION ALL
      SELECT '201508' YM, '단가' COL1, 2000 COL2
        FROM DUAL
      UNION ALL
      SELECT '201508' YM, '금액' COL1, 20000 COL2
        FROM DUAL)
SELECT   YM, COL1, COL2
    FROM (SELECT YM, COL1, COL2
            FROM T
          UNION ALL
          SELECT YM, '금액/단가' COL1, P2 / P1 COL2
            FROM (SELECT   YM, MAX(DECODE(COL1, '단가', COL2)) P1
                         , MAX(DECODE(COL1, '금액', COL2)) P2
                      FROM T
                  GROUP BY YM))
ORDER BY YM, INSTR('단가,금액,금액/단가', COL1) ASC;

 


by 해도지 [2015.08.28 12:48:46]

네 원하는 결과입니다. 감사합니다.


by 창조의날개 [2015.08.28 13:30:50]

SELECT YM
     , DECODE(COL1, NULL, '금액/단가', COL1)
     , DECODE(GROUPING(COL1), 1
            , LAG(SUM(COL2), 1, 0) OVER (ORDER BY YM, GROUPING(COL1), COL1 DESC)
            / (SUM(COL2) - LAG(SUM(COL2), 1, 0) OVER (ORDER BY YM, GROUPING(COL1), COL1 DESC))
            ,  SUM(COL2)) COL2
FROM T
GROUP BY YM, ROLLUP(COL1)
ORDER BY YM, GROUPING(COL1), COL1 DESC
;

 


by 랑에1 [2015.08.28 13:56:01]
SELECT ym 
     , CASE 
           WHEN GROUPING_ID(col1) = 0 
           THEN col1 
           ELSE '금액/단가' 
       END col1 
     , CASE 
           WHEN GROUPING_ID(col1) = 0 
           THEN MIN(col2) 
           ELSE MIN(DECODE(col1, '금액', col2)) / MIN(DECODE(col1, '단가', col2)) 
       END col2 
  FROM T 
 GROUP BY ym, ROLLUP(col1)

 


by 신이만든짝퉁 [2015.08.28 14:03:15]

와우~~ 저도 배우고 갑니다.


by 마농 [2015.08.31 08:35:19]
WITH t AS
(
SELECT '201507' ym, '단가' col1, 1000 col2 FROM dual
UNION ALL SELECT '201507', '금액', 10000 FROM dual
UNION ALL SELECT '201508', '단가',  2000 FROM dual
UNION ALL SELECT '201508', '금액', 20000 FROM dual
)
SELECT *
  FROM t
 MODEL
 PARTITION BY (ym)
 DIMENSION BY (CAST(col1 AS VARCHAR2(20)) col1)
 MEASURES (col2)
 RULES (col2['금액/단가'] = col2['금액'] / col2['단가'])
 ORDER BY ym, DECODE(col1, '단가', 1, '금액', 2, 3)
;

 


by 신이만든짝퉁 [2015.08.31 10:53:38]

우와~ 어마어마하네요. 또 배우고 갑니다. ^^

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