Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql StartDate和EndDate参数基于在另一个下拉参数中选择的日期列_Tsql_Reporting Services - Fatal编程技术网

Tsql StartDate和EndDate参数基于在另一个下拉参数中选择的日期列

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

我希望能够在SSRS中设置一个报告,您可以通过3个日期列中的一个作为下拉参数筛选结果,并输入开始日期和结束日期作为参数2,参数3作为日期选择器

目前,我有开始日期和结束日期的日期选择器参数,但我很难将下拉参数添加到查询中,因为我是SSRS新手,所以不确定我应该如何处理它

这是我当前的代码:

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列,但我把它们放在那里以防万一。

谢谢,这也行,但我认为前面的答案对我来说更简单。再次感谢。没问题,很高兴你把它分类了谢谢这也行,但我认为前面的答案对我来说更简单。再次感谢。没问题,很高兴你把它分类了帮助:-)很高兴帮助:-)