简体   繁体   中英

Partition by user defined dates sql

I have a table which gives unit sales of different items by day. I want to sum the sales for a number of user-defined (effectively arbitrary, no way to specify directly from the data) periods.

I'm trying to do this by creating a field that specifies whether what period date is within, then I can group by this. However my code is giving me the error "ORA-00923: FROM keyword not found where expected".

MY CODE:

select
SUM(UNIT_SALES),
PERIOD =
    CASE 
             WHEN DAY_DATE >= TO_DATE('04/07/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('26/09/2013', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('27/09/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('01/04/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('14/05/2014', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('21/09/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             ELSE 'NO PERIOD ASSIGNED'
    END
FROM MY_SALES_DAILY
GROUP BY PERIOD
ORDER BY PERIOD

How can I achieve this sum for user-defined periods?

Your syntax is incorrect. PERIOD = is incorrect. See the corrected SQL below.

select
SUM(UNIT_SALES),
    CASE 
             WHEN DAY_DATE >= TO_DATE('04/07/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('26/09/2013', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('27/09/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('01/04/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('14/05/2014', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('21/09/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             ELSE 'NO PERIOD ASSIGNED'
    END AS PERIOD
FROM DW_MASTER_SALES_DAILY
GROUP BY     CASE 
             WHEN DAY_DATE >= TO_DATE('04/07/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('26/09/2013', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('27/09/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('01/04/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             WHEN DAY_DATE >= TO_DATE('14/05/2014', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('21/09/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity'
             ELSE 'NO PERIOD ASSIGNED'
             END
ORDER BY PERIOD

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM