Tsql StartDate和EndDate参数基于在另一个下拉参数中选择的日期列
我希望能够在SSRS中设置一个报告,您可以通过3个日期列中的一个作为下拉参数筛选结果,并输入开始日期和结束日期作为参数2,参数3作为日期选择器 目前,我有开始日期和结束日期的日期选择器参数,但我很难将下拉参数添加到查询中,因为我是SSRS新手,所以不确定我应该如何处理它 这是我当前的代码:Tsql StartDate和EndDate参数基于在另一个下拉参数中选择的日期列,tsql,reporting-services,Tsql,Reporting Services,我希望能够在SSRS中设置一个报告,您可以通过3个日期列中的一个作为下拉参数筛选结果,并输入开始日期和结束日期作为参数2,参数3作为日期选择器 目前,我有开始日期和结束日期的日期选择器参数,但我很难将下拉参数添加到查询中,因为我是SSRS新手,所以不确定我应该如何处理它 这是我当前的代码: SELECT Column1, Column2, Column3, DateColumn1, DateColumn2, DateColumn3 FROM Table WHERE DateColumn1
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
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)
在这种情况下,我希望将较早的DateColumn1扩展为“DateType”参数,这将允许我创建一个下拉参数,以便我可以从下拉列表中选择DateColumn1/DateColumn2/DateColumn3中的任何一个,并且“StartDate”和“EndDate”将过滤从下拉选项中选择的任何日期类型
我不确定从SQL查询的角度来看,我是否以错误的方式考虑了这一点,或者是否有更好的方法来实现这一点
如果我的问题不清楚,请向您表示感谢和抱歉。标识符不能在SQL中参数化,但是您可以使用
和以及或的简单组合,根据@DateType
参数对不同的列进行筛选,如下所示:
SELECT
Column1,
Column2,
Column3,
DateColumn1,
DateColumn2,
DateColumn3
FROM Table
WHERE @DateType BETWEEN @StartDate AND @EndDate
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栏,
第2栏,
第3栏,
日期栏1,
日期栏2,
日期栏3
从桌子上
其中(@DateType=1和DateColumn1>=@StartDate和DateColumn1=@StartDate和DateColumn2=@StartDate和DateColumn3标识符不能在SQL中参数化,但是您可以使用和以及或的简单组合,根据@DateType
参数对不同的列进行筛选,如下所示:
SELECT
Column1,
Column2,
Column3,
DateColumn1,
DateColumn2,
DateColumn3
FROM Table
WHERE @DateType BETWEEN @StartDate AND @EndDate
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栏,
第2栏,
第3栏,
日期栏1,
日期栏2,
日期栏3
从桌子上
其中(@DateType=1和DateColumn1>=@StartDate和DateColumn1=@StartDate和DateColumn2=@StartDate和DateColumn3另一种方法是在查询中创建一个计算列,然后对其进行测试
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列,但我将它们留在那里以防万一。另一种方法是在查询中创建一个计算列,然后对其进行测试
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列,但我把它们放在那里以防万一。谢谢,这也行,但我认为前面的答案对我来说更简单。再次感谢。没问题,很高兴你把它分类了谢谢这也行,但我认为前面的答案对我来说更简单。再次感谢。没问题,很高兴你把它分类了帮助:-)很高兴帮助:-)