CREATE OR REPLACE VIEW SALES.WB_SUMMARY_SALES
AS
WITH X AS (SELECT TS_MONTH_BEGIN,TS_MONTH_END,TS_MONTH FROM V_ACCOUNTS_MONTHS WHERE TS_YEAR = TO_CHAR(SYSDATE,'YYYY'))
,J as (SELECT DECK, DL_PRICE, CW, ACT_MONTH, TS_MONTH, TRUNC(DL_DATE) AS DL_DATE
FROM (SELECT SP_ALLOC_DECK AS DECK, SP_TEAM,DL_REP1, CM_NAME AS REP_NAME, DL_STATUS, DECODE(DL_V_PRICE, NULL,DL_PRICE *DL_EXCH , DL_V_PRICE)AS DL_PRICE,
CASE WHEN DL_DT_COMP IS NULL THEN DL_DATE ELSE DL_DT_COMP END AS DL_DATE,
(SELECT TS_MONTH FROM X WHERE TRUNC(SYSDATE) BETWEEN TS_MONTH_BEGIN AND TS_MONTH_END) AS ACT_MONTH,
CASE WHEN DECODE(DL_DT_COMP, NULL, TRUNC(DL_DATE),TRUNC(DL_DT_COMP)) BETWEEN (NEXT_DAY(TRUNC(SYSDATE), FDAY)-6) AND (NEXT_DAY(TRUNC(SYSDATE), FDAY))
THEN TO_CHAR(DECODE(DL_DT_COMP, NULL, DL_DATE,DL_DT_COMP), 'DY') END AS CW
FROM T_DL,T_CM, T_SP,(SELECT TO_CHAR(TS_MONTH_BEGIN + 6 ,'DY') AS FDAY FROM X WHERE TS_MONTH = 1),
(SELECT CASE WHEN DL_PRICE1> DL_PRICE2 THEN DL_CODE1 ELSE DLREF1 END AS DL_V_CODE,
CASE WHEN DL_PRICE1> DL_PRICE2 THEN DL_PRICE2
WHEN DL_PRICE1< DL_PRICE2 THEN DL_PRICE2 - DL_PRICE2 ELSE 0 END AS DL_V_PRICE
FROM
(SELECT DA_CODE AS DC1, DA_DLREF2 DLREF1, DA_DLREF DL_CODE1,DL_STATUS DL_STATUS1, ROUND(DECODE(DL_PRICE, NULL, 0,DL_PRICE)*DL_EXCH) AS DL_PRICE1
FROM T_DA, T_DL
WHERE DA_DLREF = DL_CODE
AND DL_STATUS = 540
AND DL_DATE >= (SELECT TS_MONTH_BEGIN FROM X WHERE TS_MONTH = 1)),
(SELECT DA_CODE AS DC2, DA_DLREF DLREF2, DA_DLREF2 DL_CODE2,DL_STATUS DL_STATUS2,ROUND(DECODE(DL_PRICE, NULL, 0,DL_PRICE)*DL_EXCH) AS DL_PRICE2
FROM T_DA, T_DL
WHERE DA_DLREF2 = DL_CODE)
WHERE DC1 = DC2)
WHERE 1=1
AND DL_CODE = DL_V_CODE(+)
AND DL_REP1 = CM_REF
AND CM_CODE = SP_CMREF
AND INSTR(CM_VISIBILITY, 'CA')>0
AND NOT DL_STATUS IN(200, 220,250,260,270,300,310,330,370,380, 500,570)
AND DL_DATE >= (SELECT TS_MONTH_BEGIN FROM X WHERE TS_MONTH = 1)),X
WHERE TRUNC(DL_DATE) BETWEEN TS_MONTH_BEGIN AND TS_MONTH_END
AND TS_MONTH >= (SELECT TS_MONTH -1 FROM X
WHERE TRUNC(SYSDATE) BETWEEN TS_MONTH_BEGIN AND TS_MONTH_END)
and dl_price >0),
Y as (SELECT DECK, CASE WHEN ACT_MONTH = TS_MONTH THEN 1 ELSE 0 END AS MONTHLY,
CASE WHEN NOT CW IS NULL THEN 1 ELSE 0 END AS WEEKLY,
CASE WHEN TRUNC(DL_DATE) = TRUNC(SYSDATE) THEN 1 ELSE 0 END AS DAILY, DL_PRICE
FROM(SELECT DECK, CW, ACT_MONTH, TS_MONTH, DL_DATE, SUM(DL_PRICE) AS DL_PRICE
FROM J WHERE ACT_MONTH = TS_MONTH
GROUP BY DECK, CW, ACT_MONTH, TS_MONTH, DL_DATE))
SELECT DECK,'DAILY' AS PERIOD, SUM(DL_PRICE) AS TOT_SALES
FROM Y WHERE DAILY=1
GROUP BY DECK
UNION
SELECT DECK,'WEEKLY' AS PERIOD, SUM(DL_PRICE) AS TOT_SALES
FROM Y WHERE WEEKLY=1
GROUP BY DECK
UNION
SELECT DECK,'MONTHLY' AS PERIOD, SUM(DL_PRICE) AS TOT_SALES
FROM Y WHERE MONTHLY=1
GROUP BY DECK
UNION
SELECT DECK, 'YEARLY' AS PERIOD, SUM(TOT_SALE) AS TOT_SALES
FROM V_WB_TERMOMETER
GROUP BY DECK;