简体   繁体   English

动态显示会计年度 - SQL

[英]Show Fiscal Year Dynamically - SQL

I have created an Oracle SQL query that produces current year data:我创建了一个产生当年数据的 Oracle SQL 查询:

SELECT A.ITEMNO, A.DESCRIP, SUM(RD.QTYRETURNED) AS "TOTAL QTY RETURNED"
FROM   RMA R LEFT OUTER JOIN RMA_DETAIL RD ON R.ID=RD.RMA_ID
             LEFT OUTER JOIN ARINVT A ON RD.ARINVT_ID=A.ID
             LEFT OUTER JOIN ARCUSTO C ON C.ID = A.ARCUSTO_ID
WHERE  ((R."CLOSED" IS  NULL ) OR ((R.CLOSED='N' OR R.CLOSED='Y'))) AND
    EXTRACT(YEAR FROM R.RMA_DATE) = EXTRACT(YEAR FROM SYSDATE)
GROUP BY A.ITEMNO, A.DESCRIP
ORDER BY "TOTAL QTY RETURNED" DESC

I am needed to create a query that returns our fiscal year (12/1 - 11/30) so I created this:我需要创建一个返回我们财政年度(12/1 - 11/30)的查询,所以我创建了这个:

SELECT A.ITEMNO, A.DESCRIP, SUM(RD.QTYRETURNED) AS "TOTAL QTY RETURNED"
FROM   RMA R LEFT OUTER JOIN RMA_DETAIL RD ON R.ID=RD.RMA_ID
             LEFT OUTER JOIN ARINVT A ON RD.ARINVT_ID=A.ID
             LEFT OUTER JOIN ARCUSTO C ON C.ID = A.ARCUSTO_ID
WHERE  ((R."CLOSED" IS  NULL ) OR ((R.CLOSED='N' OR R.CLOSED='Y'))) AND
     R.RMA_DATE >= ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), -7) AND R.RMA_DATE < 
     ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'),   5)
GROUP BY A.ITEMNO, A.DESCRIP
ORDER BY "TOTAL QTY RETURNED" DESC

These are queries that are used to create BI Dashboards.这些是用于创建 BI 仪表板的查询。 The issue with the fiscal year query is that when the sysdate month changes, then so will the data.财政年度查询的问题在于,当 sysdate 月份发生变化时,数据也会发生变化。 What is the cleanest way to go about doing this? go 关于这样做的最干净的方法是什么? I'm just beginning with SQL, so any links to learning articles or explanations will go a long way.我只是从 SQL 开始,所以任何指向学习文章或解释的链接都将 go 很长的路要走。 TIA TIA

You can try a query like the one below.您可以尝试如下查询。 It calculates the "begin" and "end" dates based on what month you are currently in它根据您当前所在的月份计算“开始”和“结束”日期

  SELECT A.ITEMNO, A.DESCRIP, SUM (RD.QTYRETURNED) AS "TOTAL QTY RETURNED"
    FROM RMA R
         LEFT OUTER JOIN RMA_DETAIL RD ON R.ID = RD.RMA_ID
         LEFT OUTER JOIN ARINVT A ON RD.ARINVT_ID = A.ID
         LEFT OUTER JOIN ARCUSTO C ON C.ID = A.ARCUSTO_ID
   WHERE     ((R."CLOSED" IS NULL) OR ((R.CLOSED = 'N' OR R.CLOSED = 'Y')))
         AND R.RMA_DATE >=
             TO_DATE (
                    CASE EXTRACT (MONTH FROM SYSDATE)
                        WHEN 12 THEN TO_CHAR (SYSDATE, 'YYYY')
                        ELSE TO_CHAR (ADD_MONTHS (SYSDATE, -12), 'YYYY')
                    END
                 || '-12-01',
                 'YYYY-MM-DD')
         AND R.RMA_DATE <
             TO_DATE (
                    CASE EXTRACT (MONTH FROM SYSDATE)
                        WHEN 12 THEN TO_CHAR (ADD_MONTHS (SYSDATE, 12), 'YYYY')
                        ELSE TO_CHAR (SYSDATE, 'YYYY')
                    END
                 || '-12-01',
                 'YYYY-MM-DD')
GROUP BY A.ITEMNO, A.DESCRIP
ORDER BY "TOTAL QTY RETURNED" DESC

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

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