SQL Server 2008/2012 [时间]多个ins&高级查询

时间:2014-05-11 13:24:52

标签: sql-server

我有一个包含原始数据的表格,其中一个特定的ID可以每天有多个时间条目,它不是静态的,但它会成对出现,如果有一个条目,那么也会如下所示:

Row_Num Tr_Date     Tr_Time    Machine_Serial   Machine_ID  ID
-----------------------------------------------------------------
75251   04/05/2014  7:31:56 AM  243496             71767    8525
75259   04/05/2014  8:14:21 AM  243512             71767    8525
75265   04/05/2014  9:07:21 AM  244005             73330    8525
75312   04/05/2014  9:29:09 AM  244115             71767    8525
75465   04/05/2014  1:01:45 PM  244658             71767    8525
75985   04/05/2014  5:34:30 PM  245501             73330    8525

我想用' START'标记每一行。和'结束'根据这对。

第一次应该是' START' ,第二次应该是'结束'然后第三次应该是' START'第四次应该是'结束'它继续这样下去。正如我之前所说,没有预定义的设置。

请帮助查询。

谢谢和问候,

期望的结果:

Row_Num Tr_Date      Tr_Time    Machine_Serial  Machine_ID  ID      Type
---------------------------------------------------------------------------
75251   04/05/2014  7:31:56 AM  243496             71767    8525    START
75259   04/05/2014  8:14:21 AM  243512             71767    8525    END
75265   04/05/2014  9:07:21 AM  244005             73330    8525    START
75312   04/05/2014  9:29:09 AM  244115             71767    8525    END
75465   04/05/2014  1:01:45 PM  244658             71767    8525    START
75985   04/05/2014  5:34:30 PM  245501             73330    8525    END

1 个答案:

答案 0 :(得分:1)

您可以使用ROW_NUMBER() OVER(),只需输出状态,具体取决于它是偶数还是奇数;

SELECT *,
  CASE WHEN ROW_NUMBER() 
            OVER (ORDER BY row_num) % 2 = 0 
  THEN 'END' ELSE 'START' END type
FROM mytable
ORDER BY row_num;

An SQLfiddle to test with

(当然你也可以计算tr_date和tr_time上的行号,但在这种情况下row_num字段似乎就足够了)