简体   繁体   English

Oracle 计算 YTD、PYTD、QTD、PQTD、MTD、PMTD

[英]Oracle calculate YTD ,PYTD, QTD , PQTD , MTD, PMTD

My query is我的查询是

select 
ENTRIES,
SUM( CASE WHEN to_char(to_date(record_date, 'yyyy/mm/dd'),'YYYY') =2020
                 THEN ENTRIES END )         AS "Curr Yr ENTRIES" ,
SUM( CASE WHEN to_char(to_date(record_date, 'yyyy/mm/dd'),'YYYY') =2019
                 THEN ENTRIES END )         AS "PREV Yr ENTRIES" ,
SUM( CASE WHEN to_char(to_date(record_date, 'yyyy/mm/dd'),'MM') =11
                 THEN ENTRIES END ) AS "Current Month ENTRIES" ,
SUM( CASE WHEN to_char(to_date(record_date, 'yyyy/mm/dd'),'MM') =10
                 THEN ENTRIES END ) AS "PREV Month ENTRIES" ,
SUM( CASE WHEN to_char(to_date(record_date, 'yyyy/mm/dd'),'MM') =09
                 THEN ENTRIES END ) AS "PREV TO PREV Month ENTRIES" ,
SUM( CASE WHEN to_char(to_date(record_date,'yyyy/mm/dd'), 'Q')=4
                 THEN ENTRIES END ) AS "Curr Qtr ENTRIES"  ,
SUM( CASE WHEN to_char(to_date(record_date,'yyyy/mm/dd'), 'Q')=3
                 THEN ENTRIES END ) AS "PREV Qtr ENTRIES" 
from market
group by ENTRIES

Im new to oracle and in my query i have hard coded the values of year ,month and quarter.我是 oracle 的新手,在我的查询中,我对年、月和季度的值进行了硬编码。 But i want my query to work without giving any value so that it automatically picks value let me know how can it be done.但我希望我的查询在不提供任何值的情况下工作,以便它自动选择值让我知道如何完成。

You can use:您可以使用:

SELECT ENTRIES,
       SUM(
         CASE
         WHEN record_date >= TRUNC( SYSDATE, 'YYYY' )
         AND  record_date <  ADD_MONTHS( TRUNC( SYSDATE, 'YYYY' ), 12 )
         THEN ENTRIES
         END
       ) AS "Curr Yr ENTRIES",
       SUM(
         CASE
         WHEN record_date >= ADD_MONTHS( TRUNC( SYSDATE, 'YYYY' ), -12 )
         AND  record_date <  TRUNC( SYSDATE, 'YYYY' )
         THEN ENTRIES
         END
       ) AS "Prev Yr ENTRIES",
       SUM(
         CASE
         WHEN record_date >= TRUNC( SYSDATE, 'MM' )
         AND  record_date <  ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), 1 )
         THEN ENTRIES
         END
       ) AS "Curr Month ENTRIES",
       SUM(
         CASE
         WHEN record_date >= ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), -1 )
         AND  record_date <  TRUNC( SYSDATE, 'MM' )
         THEN ENTRIES
         END
       ) AS "Prev Month ENTRIES",
       SUM(
         CASE
         WHEN record_date >= TRUNC( SYSDATE, 'Q' )
         AND  record_date <  ADD_MONTHS( TRUNC( SYSDATE, 'Q' ), 3 )
         THEN ENTRIES
         END
       ) AS "Curr Qtr ENTRIES",
       SUM(
         CASE
         WHEN record_date >= ADD_MONTHS( TRUNC( SYSDATE, 'Q' ), -3 )
         AND  record_date <  TRUNC( SYSDATE, 'Q' )
         THEN ENTRIES
         END
       ) AS "Prev Qtr ENTRIES"
from market
group by ENTRIES

(Although I'm not convinced you want the initial ENTRIES, in the SELECT clause or the final GROUP BY and, instead, could just SUM over the entire period.) (虽然我不相信你想要初始ENTRIES,SELECT子句或最后的GROUP BY ,相反,可以在整个时期内SUM 。)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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