Sql server SSRS 2008报表生成器3.0:用例和时间函数

Sql server SSRS 2008报表生成器3.0:用例和时间函数,sql-server,tsql,ssrs-2008,reportbuilder3.0,case-when,Sql Server,Tsql,Ssrs 2008,Reportbuilder3.0,Case When,我已经设置了我的程序,允许用户选择一个站点,然后在两个日期之间选择,然后他们选择他们想要的班次。他们可以选择两者,第一,第二。第一个是早上6:00-4:00,第二个是下午4:00-3:00。我一共有4个参数。我认为我的程序不会为第二个班次返回任何值,因为不是所有16到3之间的值都大于开始值,小于结束值。例如,6:00PM不小于3的结束时间,因此不包括在输出中。我如何做到这一点?这是我的密码: DECLARE @StartHour INT DECLARE @EndHour INT SET @Sta

我已经设置了我的程序,允许用户选择一个站点,然后在两个日期之间选择,然后他们选择他们想要的班次。他们可以选择两者,第一,第二。第一个是早上6:00-4:00,第二个是下午4:00-3:00。我一共有4个参数。我认为我的程序不会为第二个班次返回任何值,因为不是所有16到3之间的值都大于开始值,小于结束值。例如,6:00PM不小于3的结束时间,因此不包括在输出中。我如何做到这一点?这是我的密码:

DECLARE @StartHour INT
DECLARE @EndHour INT
SET @StartHour = CASE @TimeRange 

WHEN 0 THEN 0 --Start of Overall--
WHEN 1 THEN 6 --1st Shif Start--
WHEN 2 THEN 16 --2nd Shift Start--
END

SET @EndHour = CASE @TimeRange   
WHEN 0 THEN 24 --End of Overall--
WHEN 1 THEN 16 --End of First Shift--
WHEN 2 THEN 3 --End of Second Shift--
END

SELECT
Testerline1_CycleTimes.Station,
Testerline1_CycleTimes.StationEntry

WHERE
Testerline1_CycleTimes.Station LIKE @Station
AND Testerline1_CycleTimes.StationEntry Between @Start And @End
AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) >= @StartHour
AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) < @EndHour
DECLARE@StartHour INT
声明@EndHour INT
设置@StartHour=CASE@TimeRange
当为0时,则为0——开始整体--
当1时,然后6--1档换档开始--
当2时,则为16——第二班开始--
结束
设置@EndHour=CASE@TimeRange
当值为0时,则为24——总体的结束--
当1到16时——第一个班次结束--
当2到3时——第二班结束--
结束
挑选
测试线路1_CycleTimes.Station,
Testerline1\u CycleTimes.StationEntry
哪里
测试线路1_CycleTimes.Station,如@Station
和Testerline1\u CycleTimes.StationEntry在@Start和@End之间
和日期部分(hh,Testerline1_CycleTimes.StationEntry)>=@StartHour
和日期部分(hh,Testerline1_CycleTimes.StationEntry)<@EndHour

未能回答最后一天的问题,但如果您尚未解决问题,则仍然无法回答。我建议您尝试使用union作为第二班数据。在选择时间范围时,随着日期的变化

/*******************************************************
   --Commented Code
    DECLARE @StartHour INT
    DECLARE @EndHour INT
    SET @StartHour = CASE @TimeRange 

    WHEN 0 THEN 0 --Start of Overall--
    WHEN 1 THEN 6 --1st Shif Start--
    WHEN 2 THEN 16 --2nd Shift Start--
    END

    SET @EndHour = CASE @TimeRange   
    WHEN 0 THEN 24 --End of Overall--
    WHEN 1 THEN 16 --End of First Shift--
    WHEN 2 THEN 3 --End of Second Shift--
   END 
  *******************************************/

 If(@TimeRange=1)
 BEGIN
 SELECT
    Testerline1_CycleTimes.Station,
    Testerline1_CycleTimes.StationEntry
 WHERE
    sterline1_CycleTimes.Station LIKE @Station
    AND Testerline_CycleTimes.StationEntry Between @Start And @End
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) >= 6
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) < 16
END

ELSE IF(@TimeRange=2)
BEGIN
SELECT
   Testerline1_CycleTimes.Station,
   Testerline1_CycleTimes.StationEntry  
 WHERE
    Testerline1_CycleTimes.Station LIKE @Station
    AND Testerline1_CycleTimes.StationEntry Between @Start And @End
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) >= 16
UNION ALL
SELECT
     Testerline1_CycleTimes.Station,
     Testerline1_CycleTimes.StationEntry
WHERE
    Testerline1_CycleTimes.Station LIKE @Station
    AND Testerline1_CycleTimes.StationEntry Between @Start And @End
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) < 3
END

 ELSE
 BEGIN
 SELECT
      Testerline1_CycleTimes.Station,
      Testerline1_CycleTimes.StationEntry
 WHERE
     Testerline1_CycleTimes.Station LIKE @Station
     AND Testerline1_CycleTimes.StationEntry Between @Start And @End
 END
/*******************************************************
--注释代码
声明@StartHour INT
声明@EndHour INT
设置@StartHour=CASE@TimeRange
当为0时,则为0——开始整体--
当1时,然后6--1档换档开始--
当2时,则为16——第二班开始--
结束
设置@EndHour=CASE@TimeRange
当值为0时,则为24——总体的结束--
当1到16时——第一个班次结束--
当2到3时——第二班结束--
结束
*******************************************/
如果(@TimeRange=1)
开始
挑选
测试线路1_CycleTimes.Station,
Testerline1\u CycleTimes.StationEntry
哪里
sterline1_CycleTimes.Station LIKE@Station
和Testerline_CycleTimes.Station在@Start和@End之间尝试
和日期部分(hh,Testerline1_CycleTimes.StationEntry)>=6
和日期部分(hh,Testerline1_CycleTimes.StationEntry)<16
结束
ELSE IF(@TimeRange=2)
开始
挑选
测试线路1_CycleTimes.Station,
Testerline1\u CycleTimes.StationEntry
哪里
测试线路1_CycleTimes.Station,如@Station
和Testerline1\u CycleTimes.StationEntry在@Start和@End之间
和日期部分(hh,Testerline1_CycleTimes.StationEntry)>=16
联合所有
挑选
测试线路1_CycleTimes.Station,
Testerline1\u CycleTimes.StationEntry
哪里
测试线路1_CycleTimes.Station,如@Station
和Testerline1\u CycleTimes.StationEntry在@Start和@End之间
和日期部分(hh,Testerline1_CycleTimes.StationEntry)<3
结束
其他的
开始
挑选
测试线路1_CycleTimes.Station,
Testerline1\u CycleTimes.StationEntry
哪里
测试线路1_CycleTimes.Station,如@Station
和Testerline1\u CycleTimes.StationEntry在@Start和@End之间
结束

未能回答最后一天的问题,但如果您尚未解决问题,则仍然无法回答。我建议您尝试使用union作为第二班数据。在选择时间范围时,随着日期的变化

/*******************************************************
   --Commented Code
    DECLARE @StartHour INT
    DECLARE @EndHour INT
    SET @StartHour = CASE @TimeRange 

    WHEN 0 THEN 0 --Start of Overall--
    WHEN 1 THEN 6 --1st Shif Start--
    WHEN 2 THEN 16 --2nd Shift Start--
    END

    SET @EndHour = CASE @TimeRange   
    WHEN 0 THEN 24 --End of Overall--
    WHEN 1 THEN 16 --End of First Shift--
    WHEN 2 THEN 3 --End of Second Shift--
   END 
  *******************************************/

 If(@TimeRange=1)
 BEGIN
 SELECT
    Testerline1_CycleTimes.Station,
    Testerline1_CycleTimes.StationEntry
 WHERE
    sterline1_CycleTimes.Station LIKE @Station
    AND Testerline_CycleTimes.StationEntry Between @Start And @End
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) >= 6
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) < 16
END

ELSE IF(@TimeRange=2)
BEGIN
SELECT
   Testerline1_CycleTimes.Station,
   Testerline1_CycleTimes.StationEntry  
 WHERE
    Testerline1_CycleTimes.Station LIKE @Station
    AND Testerline1_CycleTimes.StationEntry Between @Start And @End
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) >= 16
UNION ALL
SELECT
     Testerline1_CycleTimes.Station,
     Testerline1_CycleTimes.StationEntry
WHERE
    Testerline1_CycleTimes.Station LIKE @Station
    AND Testerline1_CycleTimes.StationEntry Between @Start And @End
    AND DATEPART( hh , Testerline1_CycleTimes.StationEntry ) < 3
END

 ELSE
 BEGIN
 SELECT
      Testerline1_CycleTimes.Station,
      Testerline1_CycleTimes.StationEntry
 WHERE
     Testerline1_CycleTimes.Station LIKE @Station
     AND Testerline1_CycleTimes.StationEntry Between @Start And @End
 END
/*******************************************************
--注释代码
声明@StartHour INT
声明@EndHour INT
设置@StartHour=CASE@TimeRange
当为0时,则为0——开始整体--
当1时,然后6--1档换档开始--
当2时,则为16——第二班开始--
结束
设置@EndHour=CASE@TimeRange
当值为0时,则为24——总体的结束--
当1到16时——第一个班次结束--
当2到3时——第二班结束--
结束
*******************************************/
如果(@TimeRange=1)
开始
挑选
测试线路1_CycleTimes.Station,
Testerline1\u CycleTimes.StationEntry
哪里
sterline1_CycleTimes.Station LIKE@Station
和Testerline_CycleTimes.Station在@Start和@End之间尝试
和日期部分(hh,Testerline1_CycleTimes.StationEntry)>=6
和日期部分(hh,Testerline1_CycleTimes.StationEntry)<16
结束
ELSE IF(@TimeRange=2)
开始
挑选
测试线路1_CycleTimes.Station,
Testerline1\u CycleTimes.StationEntry
哪里
测试线路1_CycleTimes.Station,如@Station
和Testerline1\u CycleTimes.StationEntry在@Start和@End之间
和日期部分(hh,Testerline1_CycleTimes.StationEntry)>=16
联合所有
挑选
测试线路1_CycleTimes.Station,
Testerline1\u CycleTimes.StationEntry
哪里
测试线路1_CycleTimes.Station,如@Station
和Testerline1\u CycleTimes.StationEntry在@Start和@End之间
和日期部分(hh,Testerline1_CycleTimes.StationEntry)<3
结束
其他的
开始
挑选
测试线路1_CycleTimes.Station,
Testerline1\u CycleTimes.StationEntry
哪里
测试线路1_CycleTimes.Station,如@Station
和Testerline1\u CycleTimes.StationEntry在@Start和@End之间
结束

我看不出问题所在,也看不到有效的SQL脚本。
WHERE
子句是什么意思?你有两个变量,它们怎么能以错误的顺序显示?我只复制了与我的问题相关的代码。这是报表生成器中使用的T-SQL代码,不确定这是否会产生影响。当我有这样的代码时,它不会返回案例2的值,应该是下午4:00到凌晨3:00。如果没有更多细节,很难解决问题。如果您只考虑
hours
部分,而
部分是
day
部分,那么可能需要设置一个SQL来处理测试数据和整个查询。这意味着,如果下午4点和凌晨3点的处理方式都不同,那么让我编辑我的原始问题并包含更多代码。我在这里看不到问题,也看不到有效的SQL脚本。
WHERE
子句是什么意思?你有两个变量,它们怎么能以错误的顺序显示呢?我只复制