2012-04-01 2 views
2

안녕하십니까. SQL SVR 2008 전문가입니다.SQL Server 2008의식이 포함 된 사례가

SQL 초보자로서 나는 어떤 방향으로 바라고 있습니다. 각 근로자가 유급 점심 식사를받을 자격이 있는지 확인하기 위해 필드 값에 대해 표현식을 검사해야하는 SELECT 문이 있습니다. 작업해야하는 시간 수는 minimumhours라는 필드의 worker 테이블 프로필에 있으며, workflow라는 테이블의 로그인 및 로그 아웃 필드에 대한 식에서 근무한 시간을 얻습니다. 다음과 같이 내가 함께 재현 한 성명합니다 (STARTDATE 및 ENDDATE는 사용자가 선택할 수있는 값이 될 것입니다)입니다 :

DECLARE @StartDate AS DateTime 
    SET @StartDate = CAST('03/25/2012' AS DATE) 
    DECLARE @EndDate AS DateTime 
    SET @EndDate = CAST('03/31/2012' AS DATE) 

    SELECT 
    w.Firstname 
    ,w.Lastname 
    ,wf.Login 
    ,wf.logout 
    ,ROUND(CAST(DATEDIFF(MI, wf.Login, wf.Logout) AS DECIMAL)/60,2) AS [Hours] 
    ,w.LunchDeduction AS [Lunch Deduction] 
    CASE [HoursBilled] = 
     WHEN DATEDIFF(hour, wf.Login, wf.Logout) < wf.MinimumHours THEN  
     ROUND(CAST(DATEDIFF(MI, wf.Login, wf.Logout) AS DECIMAL)/60,-   
      w.LunchDeduction,2) 
     WHEN DATEDIFF(hour, wf.Login, wf.Logout) >= wf.MinimumHours THEN 
      ROUND(CAST(DATEDIFF(MI, wf.Login, wf.Logout) AS DECIMAL)/60,- 0,2) 
    END 
    FROM Workers AS w 
    JOIN Workflow AS wf 
    ON wf.LoggedInWorkerid = w.ID 
    JOIN Roles AS r 
    ON w.RoleID = r.RoleID 
    WHERE (r.Descript = 'Hourly') 
    AND wf.Login >= @StartDate AND wf.Logout <= @EndDate 

은 내 요구 사항에 맞게 듯 예를 보지했으며,

+3

무엇이 문제입니까? – RBarryYoung

답변

2

을 기대했다 경우 문 앞에 누락 쉼표가 발생했습니다

DECLARE @StartDate AS DateTime 
SET @StartDate = CAST('03/25/2012' AS DATE) 
DECLARE @EndDate AS DateTime 
SET @EndDate = CAST('03/31/2012' AS DATE) 

SELECT 
w.Firstname 
,w.Lastname 
,wf.Login 
,wf.logout 
,ROUND(CAST(DATEDIFF(MI, wf.Login, wf.Logout) AS DECIMAL)/60,2) AS [Hours] 
,w.LunchDeduction AS [Lunch Deduction] 
,ROUND(CAST(DATEDIFF(MI, wf.Login, wf.Logout) AS DECIMAL)/60,2) 
- CASE 
    WHEN DATEDIFF(hour, wf.Login, wf.Logout) < wf.MinimumHours THEN  
    w.LunchDeduction 
    ELSE 
0 
END AS [HoursBilled] 
FROM Workers AS w 
JOIN Workflow AS wf 
ON wf.LoggedInWorkerid = w.ID 
JOIN Roles AS r 
ON w.RoleID = r.RoleID 
WHERE (r.Descript = 'Hourly') 
AND wf.Login >= @StartDate AND wf.Logout <= @EndDate 

, 그리고 수학이 조금 이상한 :이 당신을 위해 무엇을 찾고 있기를 바랍니다. wf.MinimumHours를 hi/hers 작업에 넣지 않은 경우에 청구 된 시간부터 w.LunchDeduction을 뺄 계획 이었지만 그 대신 정보를 정밀 매개 변수로 사용하여 함수를 반올림했습니다.

+0

감사합니다 니콜라. 이것은 잘 작동하며 CASE 문의 구문을 더 명확하게 볼 수 있습니다. ROUNDING과 관련된 다른 관련 질문을 게시 할 예정입니다. 여기서 CEO는 특정 반올림 규칙을 적용하기를 원합니다. 다시 한번 감사 드리며 아마도 다음 게시물에 도움이 될 것입니다. –

+0

이 질문에 대한 추가 사항으로, w.lunchdeduction이 0 인 경우 필드를 출력하는 방법이 있습니까? –

+0

당신은 오신 것을 환영합니다. 추가 질문은 이해하지 못했습니다. 특정 조건에서 열을 반환 할 수 없다는 뜻이라면 그럴 수 없습니다. 열은 선택 목록에서 고정됩니다. PIVOT 및 UNPIVOT 조회를 제외하고는 값만 변경할 수 있습니다. –