【发布时间】:2018-06-07 08:54:39
【问题描述】:
我有一个如下表 EmpLunch:
EmployeeId BusinessDate PunchIn Lunch1Start Lunch1End Lunch2Start Lunch2End PunchOut
101 10/12/2017 9:00 AM 1:00 PM 1:30 PM 5:00 PM
101 10/13/2017 9:00 AM 1:00 PM 1:28 PM 5:00 PM
101 10/14/2017 9:00 AM 1:00 PM 1:28 PM 3:00 PM 3:28 PM 5:00 PM
101 10/15/2017 9:00 AM 5:00 PM
我需要根据以下逻辑将数据填充到另一列 ErrorCode 中:
Error Code =
1 = Lunch 1 Not Taken
2 = Lunch 1 Less Than 30 Minutes
3 = Lunch 1 Started 300 Minutes Past IN Punch
4 = Lunch 2 Not Taken
5 = Lunch 2 Less Than 30 Minutes
结果表应该是这样的:
EmployeeId BusinessDate PunchIn Lunch1Start Lunch1End Lunch2Start Lunch2End PunchOut ErrorCode
101 10/12/2017 9:00 AM 1:00 PM 1:30 PM 5:00 PM 4
101 10/13/2017 9:00 AM 1:00 PM 1:28 PM 5:00 PM 2, 4
101 10/14/2017 9:00 AM 1:00 PM 1:28 PM 3:00 PM 3:28 PM 5:00 PM 2, 5
101 10/15/2017 9:00 AM 5:00 PM 1
我写了一个简单的代码,如下所示:
Select *,
CASE WHEN Lunch1Start IS NULL THEN '1'
WHEN DATEDIFF(MINUTE, Lunch1Start, Lunch1End) < 30.0 THEN '2'
WHEN DATEDIFF(MINUTE, LunchEnd1, PunchIn) < 300.0 THEN '3'
WHEN Lunch2Start IS NULL THEN '4'
WHEN DATEDIFF(MINUTE, Lunch2End, LunchI2Start) < 30.0 THEN '5'
END LunchError
From EmpLunch
上面的查询没有在一个单元格中给出多个记录(如上面结果表中的 10/13 和 10/14 的记录)。我的查询只给出列中的第一个值。请提出一种实现目标的方法(列中以逗号分隔的多个值)。
【问题讨论】:
标签: sql sql-server sql-server-2008 sql-server-2012 sql-server-2008-r2