마농님) 함수 질문드려요! 0 6 789

by 생택쥐포도 [2018.08.17 10:34:46]


WITH t AS
(
SELECT 'A' name, '201807' month, 50 quantity, 100 quantity_all FROM dual UNION ALL 
SELECT 'A',      '201808',       50,            0              FROM dual UNION ALL
SELECT 'A',      '201809',       50,           10              FROM dual UNION ALL
SELECT 'B',      '201807',       50,           50              FROM dual UNION ALL
SELECT 'B',      '201808',       50,           10              FROM dual UNION ALL
SELECT 'B',      '201810',       50,           20              FROM dual UNION ALL
SELECT 'B',      '201811',       50,           50              FROM dual UNION ALL
SELECT 'B',      '201812',       50,           50              FROM dual
)
SELECT name
     , quarter
     , SUM(quantity) quantity
     , SUM(quantity_all) quantity_all
     , MAX(quantity_complete) quantity_complete
  FROM (
        SELECT name
             , quarter
             , quantity
             , quantity_all
             , CASE WHEN SUM(quantity) OVER(PARTITION BY name, quarter ORDER BY month) <= SUM(quantity_all) OVER(PARTITION BY name, quarter)
                    THEN month END quantity_complete
          FROM (
                SELECT
                name, month, quantity, quantity_all, TO_CHAR(TO_DATE(month, 'yyyymm'), 'yyyy"0"q') quarter
                FROM t
                )
        )
 GROUP BY name, quarter
 ORDER BY name, quarter

by 마농 [2018.08.17 10:53:46]

질문 제목은 질문의 내용을 요약해서 해주세요. (마농님 핼프~(X))
지난번 질문과 이어진다고 해서 설명을 생략하지 말아 주세요.
지난번엔 왜 8월이 나왔고? 이번에 왜 9월이 나와야 하는지?
인과관계를 명확하게 표현하여 설명해 주세요.


by 생택쥐포도 [2018.08.17 11:01:16]

감사합니다.

다음 질문에는 말씀해주신데로 정확히 내용올리겠습니다.

 


by 마농 [2018.08.17 10:54:37]
SELECT name
     , quarter
     , SUM(quantity) quantity
     , SUM(quantity_all) quantity_all
     , MAX(quantity_complete) quantity_complete
  FROM (SELECT name
             , quarter
             , quantity
             , quantity_all
--           기존쿼리 :
--           , CASE WHEN SUM(quantity    ) OVER(PARTITION BY name, quarter ORDER BY month)
--                    <= SUM(quantity_all) OVER(PARTITION BY name, quarter)
--                  THEN month END quantity_complete
--           수정쿼리 : 수량 차감(- quantity) 추가 및 부등호 변경("<=" -->  "<")
             , CASE WHEN SUM(quantity    ) OVER(PARTITION BY name, quarter ORDER BY month)
                       -     quantity
                       < SUM(quantity_all) OVER(PARTITION BY name, quarter)
                    THEN month END quantity_complete
          FROM (SELECT name, month, quantity, quantity_all
                     , TO_CHAR(TO_DATE(month, 'yyyymm'), 'yyyy"0"q') quarter
                  FROM t
                )
        )
 GROUP BY name, quarter
 ORDER BY name, quarter
;

 


by 마농 [2018.08.17 13:41:06]

매번 질문이 불명확하네요.
"quarter 를 month 로 바꾸니 안된다" 이런 모호한 표현 말구요.
원하시는 결과표와 그에 대한 명확한 설명을 해주세요.


by 마농 [2018.08.17 14:30:52]

문제 해결을 위한 접근 방법이 잘못된 듯 합니다.
quarter 를 month 로 대체하여 문제가 된 듯 합니다.
quarter 를 month 로 대체하는게 아니라 그냥 quarter 만 제거하면 될 것 같네요.
부등호를 거꾸로 하면서 max 를 min 으로 바꿨습니다.
 

SELECT name
     , SUM(quantity) quantity
     , SUM(quantity_all) quantity_all
     , MIN(quantity_complete) quantity_complete
  FROM (SELECT name
             , quantity
             , quantity_all
             , CASE WHEN SUM(quantity    ) OVER(PARTITION BY name ORDER BY month)
                      >= SUM(quantity_all) OVER(PARTITION BY name)
                    THEN month END quantity_complete
          FROM t
        )
 GROUP BY name
 ORDER BY name
;

 


by 생택쥐포도 [2018.08.17 15:39:28]

감사합니다

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