我有一个包含原始数据的表格,其中一个特定的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
答案 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;
(当然你也可以计算tr_date和tr_time上的行号,但在这种情况下row_num字段似乎就足够了)