在select查询中添加动态列 - MS SQL

时间:2012-09-21 13:47:17

标签: sql-server

我正在使用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”和“out”。对于下一个日期或下一个/同一个员工,类型必须以“IN”开头。任何1都可以帮助我编写SQL查询。

1 个答案:

答案 0 :(得分: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]