StartDate和EndDate参数基于在另一个下拉参数中选择了哪个Date列

时间:2019-05-01 09:25:17

标签: tsql reporting-services

我希望能够在SSRS中设置报告,您可以在其中按3个日期列之一(作为下拉参数)过滤结果,然后将开始日期和结束日期作为参数2输入,将参数3作为日期选择器输入。

当前,我具有“开始日期”和“结束日期”的“日期选择器”参数,但是由于我是SSRS的新手,因此我正努力将DropDown参数添加到查询中,因此不确定该如何处理。

这是我当前的代码:

SELECT

Column1,
Column2,
Column3,
DateColumn1,
DateColumn2,
DateColumn3

FROM Table

WHERE DateColumn1 BETWEEN @StartDate AND @EndDate

我想要这样的东西:

SELECT

Column1,
Column2,
Column3,
DateColumn1,
DateColumn2,
DateColumn3

FROM Table

WHERE @DateType BETWEEN @StartDate AND @EndDate

在这种情况下,我想将较早的DateColumn1扩展为'DateType'参数,这将允许我创建一个下拉参数,以便可以从下拉列表中选择DateColumn1 / DateColumn2 / DateColumn3和'StartDate'中的一个“ EndDate”将过滤从下拉选项中选择的任何DateType。

我不确定从SQL查询的角度来看我是否以错误的方式考虑此问题,或者是否有更好的方法来实现此目的。

如果我不清楚我的问题,谢谢。

2 个答案:

答案 0 :(得分:0)

无法在SQL中对标识符进行参数化,但是您可以使用ANDOR的简单组合根据@DateType参数对不同的列进行过滤,如下所示:< / p>

SELECT
    Column1,
    Column2,
    Column3,
    DateColumn1,
    DateColumn2,
    DateColumn3
FROM Table
WHERE (@DateType = 1 AND DateColumn1 >= @StartDate AND DateColumn1 <= @EndDate)
OR (@DateType = 2 AND DateColumn2 >= @StartDate AND DateColumn2 <= @EndDate)
OR (@DateType = 3 AND DateColumn3 >= @StartDate AND DateColumn3 <= @EndDate)

答案 1 :(得分:0)

另一种方法是在查询中创建一个计算列,然后对此进行测试。像

SELECT * FROM 
    (SELECT
        Column1,
        Column2,
        Column3,
        DateColumn1,
        DateColumn2,
        DateColumn3,
        CASE @DateType
            WHEN 1 THEN DateColumn1
            WHEN 2 THEN DateColumn2
            WHEN 3 THEN DateColumn3
            ELSE NULL
        END AS CompareDate
      FROM Table) x
    WHERE x.CompareDate BETWEEN @StartDate AND @EndDate

您可能不需要DateColumn n 列,但以防万一。