2015-06-22 109 views
-5

我有這個問題,我需要你的幫助:如何在SQL Server中選擇後選擇下一行?

EmpNo Shift_Date Shift1 shift2 stamp_Date stamp_Time stamp_Type 
426 2015-04-12 A    2015-04-12 10:09:00.000 I 
426 2015-04-15 B  C  2015-04-15 23:46:00.000 I 
426 2015-04-15 B  C  2015-04-15 23:45:00.000 O 
426 2015-04-16 OF    2015-04-16 07:02:00.000 O 
426 2015-04-17 A    2015-04-17 07:34:00.000 I 
426 2015-04-18 A    2015-04-18 08:05:00.000 I 
426 2015-04-19 A    2015-04-19 10:29:00.000 I 
426 2015-04-24 A    2015-04-24 07:22:00.000 I 

,我需要選擇只與每次value ='C'和下一行的行。

; WITH Base AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY Shift_Date) RN FROM #Table1 
) 

, WithC AS (
    SELECT * FROM Base WHERE Shift2 = 'C' 
) 

SELECT * FROM WithC 
UNION 
SELECT WithCNext.* FROM WithC C LEFT JOIN Base WithCNext ON C.RN + 1 = WithCNext.RN 

您使用ROW_NUMBER()給一個序列號,所有行(請注意,你必須選擇一個排序,我已經使用Shift_Date):

+3

後查詢您已經嘗試的行 – tharif

+0

這是c#還是vb.net?我也看不到任何值字段,你說的是「shift2」嗎?請讀[ask] – Sayse

+0

你想要返回哪一行? –

回答

0

查詢可以作爲被寫入。然後你把行與Shift2 = 'C',那麼你UNION它們與具有RN + 1

沒有SQL小提琴,因爲今天(至少對我來說)它不:-(工作

+0

非常感謝你:xanatos ..它的作品:) –