2013-03-12 2 views
1

사용자가 방송국을 선택한 다음 두 날짜 사이를 선택하도록 허용하는 프로그램을 설정 한 다음 원하는 시프트를 선택합니다. 그들은 Both, First, Second를 선택할 수 있습니다. 첫 번째는 오전 6시 - 오후 4시이며 두 번째 시간은 오후 4시 - 오전 3시입니다. 총 4 개의 매개 변수가 있습니다. 16에서 3 사이의 모든 값이 시작보다 크고 끝이 작지 않기 때문에 프로그램에서 두 번째 시프트에 대한 값을 반환하지 않는다고 생각합니다. 예를 들어 오후 6시는 종료 시간 3보다 작지 않으므로 출력에는 포함되지 않습니다. 이것을 어떻게 성취합니까? 내 코드는 다음과 같습니다.SSRS 2008 보고서 작성기 3.0 : 사례 및 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 절은 무엇인가? 두 변수가 있는데 어떻게 잘못된 순서로 표시 할 수 있습니까? –

+0

나는 내 문제와 관련된 코드 만 복사했습니다. 보고서 작성기에서 사용되는 T-SQL 코드입니다. 차이가 있는지 여부는 확실하지 않습니다. 이런 식으로 코드를 작성하면 케이스 2에 대한 값을 반환하지 않습니다. 케이스 2는 오후 4시에서 3시 사이에 있어야합니다. – Newbie1331

+0

자세한 내용이 없으면 문제를 파악하기 어렵습니다. 아마도 테스트 데이터와 전체 쿼리로 SQL Fiddle을 설정해야할까요? –

답변

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 주 동안 이것을 해결하려고 노력해 주셔서 감사합니다! – Newbie1331

+0

기꺼이 도와 드리겠습니다. – Pratik

+0

이것은 두 번째 이동을 위해 작동하지만 첫 번째 이동 값이 완전히 잘못되었습니다. 나는 심지어 출력 된 값에서 패턴을 찾을 수 없다. – Newbie1331

관련 문제