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
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) ;