2013-12-21 45 views
2

我有一個查詢獲取時間時鐘和中斷時間異常。如果有人不休息,休息時間是一個負數。我需要報告「BreakTime」,但是我需要將負面休息分鐘更改爲「0」,否則報告休息分鐘。如何爲總計添加Case語句

我的查詢是:

SELECT lEmployeeID, sFirstName, sLastName, 
     TotalHours, BreakTime, SkippedBreak, ShortBreak 
FROM (
    SELECT lEmployeeID, sFirstName, sLastName, 
     SUM(TotalHours) AS TotalHours, 
     DATEDIFF(mi, MIN(dtTimeOut), MAX(dtTimeIn)) AS BreakTime, 
     CASE WHEN SUM(ftc.TotalHours) > 6 
       AND DATEDIFF(mi, MIN(ftc.dtTimeOut), MAX(ftc.dtTimeIn)) < 0 
      THEN 1 
      ELSE 0 
     END AS SkippedBreak, 
     CASE WHEN DATEDIFF(mi, MIN(ftc.dtTimeOut), MAX(ftc.dtTimeIn)) < 30 
       AND DATEDIFF(mi, MIN(ftc.dtTimeOut), MAX(ftc.dtTimeIn)) > 0 
      THEN 1 
      ELSE 0 
     END AS ShortBreak 
    FROM dbo.fTimeCard(@StartDate, @EndDate, @DeptList, 
         @iActive, @EmployeeList) AS ftc 
    WHERE (DID IS NOT NULL) 
     OR (DID IS NOT NULL) 
     AND (dtTimeOut IS NULL) 
    GROUP BY lEmployeeID, sFirstName, sLastName 
) AS sub 
WHERE (SkippedBreak = 1) 
    OR (ShortBreak = 1) 

現在我的輸出看起來是這樣的:

Bob Bibby 6.03 -362 
Rob thomas 10.53 -632 
Bret smith 7.6 17 
Ron blah 8.1 25 

我需要負課間分鐘爲 「0」

+0

可能重複的[如何在Case語句中僅顯示聚合或標記結果](http://stackoverflow.com/questions/20721824/how-to-display-only-aggregate-or-flagged-results-in - 個案聲明) –

+0

這是一個來自我對最後一個問題的調查結果的問題。這是一個不同的問題。我現在試圖改變「Breaktime」的結果,如果它小於0 – Shmewnix

+1

如果你爲你正在查詢的查詢提供了一個簡單的'input'數據和相應的'output'數據(結果),那將會容易得多。 – gotqn

回答

1

包裹查詢在使用CASE來處理負彙總值的外部查詢:

SELECT 
    lEmployeeID, sFirstName, sLastName, TotalHours, 
    CASE WHEN BreakTime < 0 THEN 0 ELSE BreakTime END AS BreakTime, 
    SkippedBreak, ShortBreak 
FROM (
    <your current query> 
) t