【问题标题】:Year Over Year SQL Statement in SSRS Query DesignerSSRS 查询设计器中的年复一年 SQL 语句
【发布时间】:2014-05-14 00:32:08
【问题描述】:

所以目前我有一个 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 年到来时,这份报告将与其他报告不同。

【问题讨论】:

    标签: sql sql-server tsql reporting-services reporting


    【解决方案1】:

    我想我有适合你的解决方案:

    /*  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"
    

    我希望你不要生气,因为我使用了你自己的代码 hhh.. 我的机器上没有安装 ORACLE,所以你必须稍微修改一下(我希望不会)代码。

    希望对你有帮助。

    祝你好运

    【讨论】:

    • 这太棒了,先生,感谢您的帮助!我对上述 SQL 有一些小问题,因为我不是 SQL 专家(我介于初学者和专家之间)。由于不允许我将字段的实际名称提供给公共表单,我希望我可以私信您以获得帮助。基本上它在 SSRS 的查询中说 ORA-00923 的错误:从关键字未在预期的位置找到 =( 与常规 SQL 相比,SSRS 中的这个查询设计器也有点不稳定,这使得这个查询设计器更难使用 =(
    • 我已经通过了那个错误,它现在说 ORA-00933: SQL 命令没有正确结束...
    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多