【问题标题】:How to code a Where Clause to deliver data based on a parameter selection如何编写 Where 子句以根据参数选择传递数据
【发布时间】:2014-08-22 06:04:48
【问题描述】:

我正在使用 SSRS 和 SSMS 2008 R2。我有 2 份报告,用户希望将它们合并为 1 份报告,并且可以选择 获取 2013 年或 2014 年数据的日​​期。两个报告中的所有数据集都相同,除了一个 2013 年组与 2014 年组客户的每个报告中的数据集具有不同的硬编码 Where 子句值。 我想我可以在 Where 子句中做一个 CASE 语句来根据 @Startdate 参数选择硬编码的 2013 组或 2014 组, 但这不起作用,关于如何做到这一点的任何想法?

这是 2013 年查询和 2014 年查询,即 Where 子句是 2 份报告之间的唯一区别:

    SELECT [FISCAL YEAR]
,COUNT(*) AS EXPECTED
,SUM(Amount) AS Total
FROM dbo.Table1 T1
INNER JOIN dbo.Table2 T2
    ON T1.primarykey = T2.primarykey
WHERE Field1 IN (
        5555
        ,6666
        )
    AND Field2 IN (
        2222
        ,3333
        )
    AND YEAR(T1.DATE) = YEAR(@StartDate)
    AND T1.AMOUNT >= 25000
    AND T1.DESCRIPTION IN (
        'The Campaign - YYY - 2011-2015'
    ,'The Campaign - ZZZ - 2011-2015'
    ,'2013 AAA Goal'
    ,'2013 BBB Goal'
    ,'2013 CCC Goal'
    ,'2013 DDD Goal'
    ,'2013 EEE'
    ,'2013 FFF'
    )
GROUP BY RIGHT(CONVERT(VARCHAR, T1.DATE, 1), 2)

SELECT [FISCAL YEAR]
    ,COUNT(*) AS EXPECTED
    ,SUM(Amount) AS Total
FROM dbo.Table1 T1
INNER JOIN dbo.Table2 T2
    ON T1.primarykey = T2.primarykey
WHERE Field1 IN (
        5555
        ,6666
        )
    AND Field2 IN (
        2222
        ,3333
        )
    AND YEAR(T1.DATE) = YEAR(@StartDate)
    AND T1.AMOUNT >= 25000
    AND T1.DESCRIPTION IN (
        'The Campaign - YYY - 2011-2015'
        ,'The Campaign - ZZZ - 2011-2015'
        ,'2014 AAA Goal'
        ,'2014 BBB Goal'
        ,'2014 CCC Goal'
        ,'2014 DDD Goal'
        ,'2014 EEE'
        ,'2014 FFF'
        ,'2014 GGG'
        ,'2014 HHH'
        ,'2014 JJJ'
        ,'2014 LLL'
        )
GROUP BY RIGHT(CONVERT(VARCHAR, T1.DATE, 1), 2)

【问题讨论】:

    标签: sql-server-2008


    【解决方案1】:

    不知道你的表和数据库。我将联合两个查询之间的所有内容,并在联合上添加带有新年列的参数。

    Select * from 
    (
    SELECT [FISCAL YEAR]
    ,COUNT(*) AS EXPECTED
    ,SUM(Amount) AS Total, YEAR(T1.DATE) as 'pYear'
    FROM dbo.Table1 T1
    INNER JOIN dbo.Table2 T2
        ON T1.primarykey = T2.primarykey
    WHERE Field1 IN (
            5555
            ,6666
            )
        AND Field2 IN (
            2222
            ,3333
            )
        --AND YEAR(T1.DATE) = YEAR(@StartDate)
        AND T1.AMOUNT >= 25000
        AND T1.DESCRIPTION IN (
            'The Campaign - YYY - 2011-2015'
        ,'The Campaign - ZZZ - 2011-2015'
        ,'2013 AAA Goal'
        ,'2013 BBB Goal'
        ,'2013 CCC Goal'
        ,'2013 DDD Goal'
        ,'2013 EEE'
        ,'2013 FFF'
        )
    GROUP BY RIGHT(CONVERT(VARCHAR, T1.DATE, 1), 2)
    Union ALL
    SELECT [FISCAL YEAR]
        ,COUNT(*) AS EXPECTED
        ,SUM(Amount) AS Total, YEAR(T1.DATE) as 'pYear'
    FROM dbo.Table1 T1
    INNER JOIN dbo.Table2 T2
        ON T1.primarykey = T2.primarykey
    WHERE Field1 IN (
            5555
            ,6666
            )
        AND Field2 IN (
            2222
            ,3333
            )
        --AND YEAR(T1.DATE) = YEAR(@StartDate)
        AND T1.AMOUNT >= 25000
        AND T1.DESCRIPTION IN (
            'The Campaign - YYY - 2011-2015'
            ,'The Campaign - ZZZ - 2011-2015'
            ,'2014 AAA Goal'
            ,'2014 BBB Goal'
            ,'2014 CCC Goal'
            ,'2014 DDD Goal'
            ,'2014 EEE'
            ,'2014 FFF'
            ,'2014 GGG'
            ,'2014 HHH'
            ,'2014 JJJ'
            ,'2014 LLL'
            )
    GROUP BY RIGHT(CONVERT(VARCHAR, T1.DATE, 1), 2)
    ) as t 
    where pYear =YEAR(@StartDate)
    

    希望有帮助

    【讨论】:

    • 感谢您的帮助!收到 P.DATE_EXPECTED 错误在选择列表中无效,因为它不包含在 Group BY 列表中。 (我在 T1.Date 使用 'FY' + RIGHT(CONVERT(VARCHAR, P.DATE_EXPECTED, 1), 2)+ ' - YTD' AS [FISCAL YEAR])。所以我将 P.DATE_EXPECTED 添加到 Group By 中。然后我得到了 16 行,其中包含 2 组 8 行的重复数据,每个 8 行的总数和计数不同。我需要返回一行来计算总数,并将每个财政年度的金额相加。如财政年度 = FY14 预期 = 24 总计 = $24,000,000 pYear = 2014
    • 请修改我的答案,以便对其他人有所帮助。谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    相关资源
    最近更新 更多