簡體   English   中英

列包含特定值時轉到下一行(SQL Server 2008)

[英]go to next row when a column contain certain value (sql server 2008)

這是我正在使用的表格的示例(24小時制)

|ID      |Name        |Department  |InOutID|Date      | Hours | Minutes|
________________________________________________________________________
0123     | Phil Jones | security   |1      |2018-07-07| 7      |30      
________________________________________________________________________
0123     | Phil Jones | security   |2      |2018-07-07| 10     |30      
_________________________________________________________________________
0123     | Phil Jones | security   |1      |2018-07-07| 13     |30 
_________________________________________________________________________
0123     | Phil Jones | security   |2      |2018-07-07| 17     |00          

我正在使用計分系統數據庫,因此基本上我需要做的是驗證IdInOut列是否為1,然后是否為條目,如果其2為退出,那么我應該計算出epmloyee花費的真實時間在辦公室(表按日期,小時,分鍾等順序排序)通常,IdInOUt應該是這樣的

    |IDInOut|
    _________
    2
    _________
    1
    _________
    2
    _________
    1  
    .....

基本上我需要做的是設置一個游標指向第一行,另一個游標指向第二行,對於每次迭代,我從第一個游標中減去第二個游標的小時和分鍾,並將它們存儲到變量中,然后在以后使用太好了,但是上一張表存在問題,如下所示:

 |ID      |Name        |Department  |InOutID|Date      | Hours | Minutes|
   ________________________________________________________________________
   0123     | Phil Jones | security   |1      |2018-07-07|7      |30      
   ________________________________________________________________________
   0123     | Phil Jones | security   |1      |2018-07-07|7      |32     
   _________________________________________________________________________
   0123     | Phil Jones | security   |2      |2018-07-07|10     |30      
   _________________________________________________________________________
   0123     | Phil Jones | security   |1      |2018-07-07|13     |30 
   _________________________________________________________________________
   0123     | Phil Jones | security   |2      |2018-07-07|17     |00          

有連續的行具有相同的IdInOut,這代表了一個問題,因為我的工作方法是每次前面提到的每次迭代都使每個游標跳2行,但是在這種情況下,每個游標只應跳一行,在這種情況下我沒有無法找到解決方案:/我知道解釋時間很長,但是我真的被困在這里,歡迎任何幫助

有一種相對有效的方法來確定數據是否正確-差不多。 它將確定數據中是否缺少“ 1”或“ 2”。 此版本無法確定第一個ID是否為“ 1”,因為您的問題沒有提及。

最好的解決方案是使用lag()lead() 但是,SQL Server 2008不支持這些功能。 因此,讓我們將其作為隔gap。 對於給定的id是否存在連續超過1個“ 1”或“ 2”的情況? 以下代碼應找到這些異常:

select id, inoutid, count(*) as num_in_row,
from (select t.*,
             row_umber() over (partition by id, inoutid order by date, hours, minute) as seqnum_ii,
             row_umber() over (partition by id order by date, hours, minute) as seqnum_i
      from t
     ) t
group by id, inoutid, (seqnum_i - seqnum_ii)
having count(*) > 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM