Sql 如何为聚合添加Case语句
我有一个查询,可以获取时钟和中断时间异常。如果有人不休息,休息时间是负数。我需要报告“休息时间”,但是我需要将负休息时间更改为“0”,否则报告休息时间 我的问题是:Sql 如何为聚合添加Case语句,sql,sql-server,tsql,sql-server-2005,Sql,Sql Server,Tsql,Sql Server 2005,我有一个查询,可以获取时钟和中断时间异常。如果有人不休息,休息时间是负数。我需要报告“休息时间”,但是我需要将负休息时间更改为“0”,否则报告休息时间 我的问题是: SELECT lEmployeeID, sFirstName, sLastName, TotalHours, BreakTime, SkippedBreak, ShortBreak FROM ( SELECT lEmployeeID, sFirstName, sLastName, SUM(T
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)
我需要负的中断时间分钟数为“0”将您的查询包装在外部查询中,该查询使用
大小写来处理负聚合值:
SELECT
lEmployeeID, sFirstName, sLastName, TotalHours,
CASE WHEN BreakTime < 0 THEN 0 ELSE BreakTime END AS BreakTime,
SkippedBreak, ShortBreak
FROM (
<your current query>
) t
选择
lEmployeeID、sFirstName、sLastName、TotalHours、,
当中断时间小于0时,则为0,否则中断时间结束为中断时间,
短跑
从(
)t
可能重复的问题源自我对上一个问题的发现。这是另一个问题。我现在正在尝试更改“中断时间”的结果,如果它小于0,那么如果您为您要查找的查询提供一个简单的输入
数据和相应的输出
数据(结果),就会容易得多。
SELECT
lEmployeeID, sFirstName, sLastName, TotalHours,
CASE WHEN BreakTime < 0 THEN 0 ELSE BreakTime END AS BreakTime,
SkippedBreak, ShortBreak
FROM (
<your current query>
) t