2013-03-12 55 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