我希望能够在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查询的角度来看我是否以错误的方式考虑此问题,或者是否有更好的方法来实现此目的。
如果我不清楚我的问题,谢谢。
答案 0 :(得分:0)
无法在SQL中对标识符进行参数化,但是您可以使用AND
和OR
的简单组合根据@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 列,但以防万一。