2013-03-12 88 views
1

我有我的程序设置允许用户选择一个站,然​​后选择两个日期之间,然后他们选择他们想要的转变。他们可以选择两种,一种或二种。首先是早上6点到下午4点,第二点是下午4点到3点。我总共有4个参数。我认为我的程序没有返回第二班的值,因为不是16和3之间的所有值都大于开始和小于结束。例如下午6:00不少于3的结束小时,所以它不包含在输出中。我如何实现这一目标?这里是我的代码:SSRS 2008报表生成器3.0:使用CASE和WHEN函数

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 
+0

我在这里没有看到问题,而且也没有看到有效的SQL脚本。什么是WHERE条款?你有两个变量,它们如何以错误的顺序显示? – 2013-03-12 13:41:51

+0

我只复制了与我的问题相关的代码。它是在报表生成器中使用的T-SQL代码,不知道这是否有所作为。当我有我这样的代码时,它不会返回情况2的值,这应该是下午4点到3点。 – Newbie1331 2013-03-12 13:57:37

+0

没有更多细节很难弄清楚问题。也许用测试数据和整个查询来设置一个SQL小提琴? – 2013-03-12 15:08:17

回答

1

错过了回答最后一天,但仍然如果你还没有解决这个问题。我会建议尝试使用联盟的第二班次数据。由于时间范围内选择的日期变化

/******************************************************* 
    --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 
+0

中选择的2日期时间参数完美地工作!非常感谢你,我一直试图解决这个问题2周! – Newbie1331 2013-03-13 15:04:56

+0

很高兴我可以帮助:) – Pratik 2013-03-13 16:01:53

+0

这工作的第二班,但后来它使我的第一班值完全错误。我甚至无法在输出值中找到模式。 – Newbie1331 2013-03-15 17:54:44

相关问题