2013-12-21 46 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