簡體   English   中英

SSRS查詢設計器中的SQL SQL語句

[英]Year Over Year SQL Statement in SSRS Query Designer

因此,目前,我有一個SSRS報告,該報告使用查找功能比較不同的數據集,以比較2013年基准年(起始年)的當前年份。現在,我想更改這些SQL數據集,以生成另一個動態報告一年又一年。 因此,對於第一年,它會給我與去年相同的結果(因為它仍將2014年與2013年進行比較),然后第二年它將對每個月的2015年至2014年進行比較。 我正在SSRS SQL查詢設計器中執行此操作。 我顯示當前年份的SQL語句是:

SELECT        PLN.ALN, TO_CHAR(PLN.FT_DTE, 'YY/MM') AS "MM-YY", COUNT(*) AS ALT, 
                     trim(CONCAT(PLN.ALN, to_char(PLN.FT_DTE, 'YY/MM'))) AS MONTHKEY, 
                     PERFORMANCE.STATUS
FROM            PLN, PERFORMANCE
WHERE        PLN.OG = PERFORMANCE.OG AND 
                         PLN.DST = PERFORMANCE.ACT_DST AND 
                         PLN.FT_N = PERFORMANCE.FT AND 
                         PLN.FT_DTE = PERFORMANCE.FT_DT AND 
                         PLN.TIL = PERFORMANCE.ACT_TIL AND (PLN.FT_DTE BETWEEN 
                         :P_Start_Date AND :P_End_Date) AND (PLN.DST = 'FDS') AND (PERFORMANCE.STUS = 'RAR') AND 
                         (PLN.ALN IS NOT NULL)
GROUP BY PLAN.ALN, TO_CHAR(PLN.FT_DTE, 'YY/MM'), 
                         PERFORMANCE.STUS
ORDER BY PLN.ALN, "MM-YY"

這使我可以指定一個日期,並將計算某個字段每月發生的次數。

現在,我需要編寫另一個SQL作為單獨的數據集,該數據集將動態查找過去的信息(而不是像我現在已有超過一年的基本報告那樣,僅能查找2013信息的靜態數據集)。 我認為SQL將與我上面寫的類似,但是我不確定如何使它像這樣動態。 從本質上來說,2014年應該找到完全相同的信息。 2015年到來時,該報告將與其他報告有所不同。

我想我有適合您的解決方案:

/*  YEAR_N      :   Refers the DataSet of the year N        */
/*  YEAR_N_M_1  :   Refers the DataSet of the year N-1  */

SELECT

         YEAR_N.MONTHKEY
        ,YEAR_N.ALN
        ,YEAR_N."MM-YY"
        ,YEAR_N.ALT
        ,YEAR_N.STATUS
        ,'***' AS SEP
        ,YEAR_N_M_1.MONTHKEY
        ,YEAR_N_M_1.ALN
        ,YEAR_N_M_1."MM-YY"
        ,YEAR_N_M_1.ALT
        ,YEAR_N_M_1.STATUS
FROM
(SELECT
         PLN.ALN
        ,TO_CHAR(PLN.FT_DTE, 'YY/MM') AS "MM-YY"
        ,COUNT(*) AS ALT
        ,TRIM(CONCAT(PLN.ALN, to_char(PLN.FT_DTE, 'YY/MM'))) AS MONTHKEY
        ,PERFORMANCE.STATUS
        ,TO_NUMBER(to_char(PLN.FT_DTE, 'YY')) _YEAR
        ,to_char(PLN.FT_DTE, 'MM') _MONTH
FROM
     PLN
    ,PERFORMANCE
WHERE
        PLN.OG = PERFORMANCE.OG
AND     PLN.DST = PERFORMANCE.ACT_DST 
AND     PLN.FT_N = PERFORMANCE.FT 
AND     PLN.FT_DTE = PERFORMANCE.FT_DT
AND     PLN.TIL = PERFORMANCE.ACT_TIL
AND     (PLN.FT_DTE BETWEEN :P_Start_Date AND :P_End_Date)
AND     (PLN.DST = 'FDS')
AND     (PERFORMANCE.STUS = 'RAR')
AND     (PLN.ALN IS NOT NULL)
GROUP BY
        PLAN.ALN, TO_CHAR(PLN.FT_DTE, 'YY/MM'),PERFORMANCE.STUS) AS YEAR_N
LEFT JOIN

(SELECT
         PLN.ALN
        ,TO_CHAR(PLN.FT_DTE, 'YY/MM') AS "MM-YY"
        ,COUNT(*) AS ALT
        ,TRIM(CONCAT(PLN.ALN, to_char(PLN.FT_DTE, 'YY/MM'))) AS MONTHKEY
        ,PERFORMANCE.STATUS
        ,TO_NUMBER(to_char(PLN.FT_DTE, 'YY')) _YEAR
        ,to_char(PLN.FT_DTE, 'MM') _MONTH
FROM
     PLN
    ,PERFORMANCE
WHERE
        PLN.OG = PERFORMANCE.OG
AND     PLN.DST = PERFORMANCE.ACT_DST 
AND     PLN.FT_N = PERFORMANCE.FT 
AND     PLN.FT_DTE = PERFORMANCE.FT_DT
AND     PLN.TIL = PERFORMANCE.ACT_TIL
AND     (PLN.FT_DTE BETWEEN :P_Start_Date AND :P_End_Date)
AND     (PLN.DST = 'FDS')
AND     (PERFORMANCE.STUS = 'RAR')
AND     (PLN.ALN IS NOT NULL)
GROUP BY
        PLAN.ALN, TO_CHAR(PLN.FT_DTE, 'YY/MM'),PERFORMANCE.STUS) AS YEAR_N_M_1
    ON 
        YEAR_N._YEAR    = YEAR_N_M_1._YEAR-1
    AND YEAR_N._MONTH   = YEAR_N_M_1._MONTH

ORDER BY PLN.ALN, "MM-YY"

我希望您不是UPSET,因為我使用了自己的代碼……..我的機器上沒有安裝ORACLE,因此您必須修改一點(但願不是)。

我希望這能幫到您。

祝好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM