0

我使用 Ms SQL 数据库,我的表看起来,

SrNo  Emp_ID   Date          Time 
------------------------------------
  1    25     03-Sep-12    9:35:35 AM  
  2    25     03-Sep-12   10:31:32 AM 
  3    25     03-Sep-12   10:34:13 AM 
  4    25     03-Sep-12   11:05:08 AM 
  5    25     03-Sep-12   11:08:39 AM 
  6    25     04-Sep-12   09.05.40 AM     

预期的输出是

 SrNo  Emp_ID   Date          Time     Type 
---------------------------------------------
  1    25     03-Sep-12    9:35:35 AM  IN
  2    25     03-Sep-12   10:31:32 AM  OUT
  3    25     03-Sep-12   10:34:13 AM  IN
  4    25     03-Sep-12   11:05:08 AM  OUT
  5    25     03-Sep-12   11:08:39 AM  IN
  6    25     04-Sep-12   09.05.40 AM  IN

对于员工,必须在特定日期同时添加“输入”和“输出”。对于下一个日期或下一个/同一员工,类型必须以“IN”开头。任何 1 都可以帮助我编写 sql 查询。

4

1 回答 1

0

您可以使用附加列来实现此目的

ROW_NUMBER() OVER (PARTITION BY Emp_ID, Date ORDER BY Time) AS RN

然后检查模数 2,如果余数为 1,则为 IN,如果为 0,则为 OUT,根据您的要求。

进一步来说

CASE WHEN 
  ROW_NUMBER() OVER (PARTITION BY Emp_ID, Date ORDER BY Time) % 2 = 1 
     THEN 'IN' 
     ELSE 'OUT' 
  END AS [Type]
于 2012-12-03T11:02:53.870 回答