我的问题很简单。
我有这张桌子,每当员工在时钟上使用他的时间卡时就会保存一行:
EmployeeID DateTime
---------- --------------------
1 2016-02-16 07:00 am
1 2016-02-16 06:30 pm
1 2016-02-17 07:15 am
2 2016-02-17 09:00 am
1 2016-02-17 11:30 am
1 2016-02-17 01:45 pm
1 2016-02-17 06:45 pm
2 2016-02-17 06:45 pm
我需要的是计算一个列,用于确定IN或OUT办公室的员工。为此,我估计每个员工每天的第一条记录是IN,下一个OUT,下一个IN等等。
因此给定示例的结果应为:
EmployeeID DateTime INOUT
---------- -------------------- -----
1 2016-02-16 07:00 am IN
1 2016-02-16 06:30 pm OUT
1 2016-02-17 07:15 am IN
2 2016-02-17 09:00 am IN
1 2016-02-17 11:30 am OUT
1 2016-02-17 01:45 pm IN
1 2016-02-17 06:45 pm OUT
2 2016-02-17 06:45 pm OUT
我想我需要加入以前的每条记录,然后计算但不知道如何。
由于
答案 0 :(得分:6)
您可以使用ROW_NUMBER
,无需自己加入表格:
WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BY [DateTime])
FROM dbo.YourTable
)
SELECT *,
CASE WHEN RN % 2 = 1 THEN 'IN' ELSE 'OUT' END INOUT
FROM CTE;