쿼라 질문입니다. 도움부탁드려요 0 2 896

by 강쥐용 [Oracle 기초] [2017.05.08 13:38:31]


product   State 05월 01일 05월 02일 05월 03일 05월 04일 05월 05일 05월 06일
신발   판매 0 29.5 147.5 147.5 0 147
신발   입고 82 122 79 116 139 125
신발   sales 0 13.42373 2.683616 1.821263 2.249615 1.813362
    누적입고 82 204 283 399 538 663
    누적판매 0 29.5 177 324.5 324.5 471.5

 

현재 PAD_ST 테이블에 위의 데이터가 존재합니다

slsect Product, state,q_qty,d_day from pad_st 

위 누적입고, 누적판매가 나오도록 쿼리를 구성하고싶은데..어떻게해야할지 잘 모르겟습니다

어떤식으로 구성해야할지 도움부탁드립니다.

5/1 의 데이터컬럼 : D_DAY

수량 컬럼 Q_QTY

 

by 마농 [2017.05.08 14:19:29]

결과내역만 있네요? 원본도 보여주세요.
 - 0 건의 자료도 존재하는지? (예 : 5/1 판매)
 - 입고나 판매가 하루 한건만 들어오는지? 여러건 가능한지?
 - d_day 의 자료형과 저장 형태는?
 - 결과표의 sales 는 어떤 항목?


by 마농 [2017.05.08 16:48:37]
WITH pad_st AS
(
SELECT '신발' product, '20170501' d_day, '판매' state, 0 q_qty FROM dual
UNION ALL SELECT '신발', '20170501', '입고',  82   FROM dual
UNION ALL SELECT '신발', '20170502', '판매',  29.5 FROM dual
UNION ALL SELECT '신발', '20170502', '입고', 122   FROM dual
UNION ALL SELECT '신발', '20170503', '판매', 147.5 FROM dual
UNION ALL SELECT '신발', '20170503', '입고',  79   FROM dual
UNION ALL SELECT '신발', '20170504', '판매', 147.5 FROM dual
UNION ALL SELECT '신발', '20170504', '입고', 116   FROM dual
UNION ALL SELECT '신발', '20170505', '판매',   0   FROM dual
UNION ALL SELECT '신발', '20170505', '입고', 139   FROM dual
UNION ALL SELECT '신발', '20170506', '판매', 147   FROM dual
UNION ALL SELECT '신발', '20170506', '입고', 125   FROM dual
UNION ALL SELECT '가방', '20170501', '판매',  50   FROM dual
UNION ALL SELECT '가방', '20170501', '입고',   0   FROM dual
UNION ALL SELECT '가방', '20170502', '판매',   0   FROM dual
UNION ALL SELECT '가방', '20170502', '입고',  50   FROM dual
UNION ALL SELECT '가방', '20170503', '판매',   0   FROM dual
UNION ALL SELECT '가방', '20170503', '입고', 100   FROM dual
UNION ALL SELECT '가방', '20170504', '판매', 200   FROM dual
UNION ALL SELECT '가방', '20170504', '입고',  50   FROM dual
UNION ALL SELECT '가방', '20170505', '판매',  30   FROM dual
UNION ALL SELECT '가방', '20170505', '입고',  20   FROM dual
UNION ALL SELECT '가방', '20170506', '판매',  30   FROM dual
UNION ALL SELECT '가방', '20170506', '입고', 100   FROM dual
)
SELECT *
  FROM (SELECT product
             , dd
             , 입고
             , 판매
             , SUM(입고) OVER(PARTITION BY product ORDER BY dd) 누적입고
             , SUM(판매) OVER(PARTITION BY product ORDER BY dd) 누적판매
             , ROUND(        SUM(판매) OVER(PARTITION BY product ORDER BY dd)
                    / NULLIF(SUM(입고) OVER(PARTITION BY product ORDER BY dd), 0)
                    * 100, 3) sales
          FROM (SELECT product
                     , state
                     , TO_NUMBER(SUBSTR(d_day, 7, 2)) dd
                     , q_qty
                  FROM pad_st
                 WHERE d_day LIKE :v_yyyymm || '%'
                )
         PIVOT (MIN(q_qty) FOR state IN ('판매' 판매, '입고' 입고))
        )
 UNPIVOT (v FOR state IN (판매, 입고, sales, 누적입고, 누적판매))
 PIVOT (MIN(v) FOR dd IN (1, 2, 3, 4, 5, 6))
 ORDER BY product, DECODE(state, '판매', 1, '입고', 2, 'SALES', 3, '누적입고', 4, '누적판매', 5)
;

 

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