Sql server SSRS 2008报表生成器3.0:用例和时间函数
我已经设置了我的程序,允许用户选择一个站点,然后在两个日期之间选择,然后他们选择他们想要的班次。他们可以选择两者,第一,第二。第一个是早上6:00-4:00,第二个是下午4:00-3:00。我一共有4个参数。我认为我的程序不会为第二个班次返回任何值,因为不是所有16到3之间的值都大于开始值,小于结束值。例如,6:00PM不小于3的结束时间,因此不包括在输出中。我如何做到这一点?这是我的密码: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
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
子句是什么意思?你有两个变量,它们怎么能以错误的顺序显示呢?我只复制