2012-05-04 73 views
4

我在SQL Server 2008中一個初學者,我很難找到如下因素題解:刪除連續行與同一領域的重視

我想要做一個選擇哪個消除具有相同的連續行「stat」並只保留最後一次出現。

爲了讓自己更好地理解,我給你這個例子:

My table             Results 
idLigne | id | statut         idLigne | id | stat 
    L1  1  A           L2  1  A 
    L2  1  A           L6  1  B 
    L3  1  B           L7  1  A 
    L4  1  B     ====>     L8  1  B 
    L5  1  B 
    L6  1  B 
    L7  1  A 
    L8  1  B 

謝謝。

回答

3

如果您將行號分配給結果集,您可以在行號和行號上連接「當前」和「上一個」記錄 - 1;如果statut與t2不同行將被清除。測試這將使我們行沒有前輩。

; with transformed as (
    select idLigne, 
     statut, 
     row_number() over (order by idLigne) rn 
    from myTable 
) 
select myTable.* 
    from myTable 
inner join transformed t1 
    on myTable.idLigne = t1.idLigne 
    left join transformed t2 
    on t1.rn = t2.rn - 1 
    and t1.statut = t2.statut 
where t2.rn is null 

演示文稿在Sql Fiddle

+0

Thx您快速回復!這很好用!但現在我有另一個問題,我將創建一個新的話題。 – Tlachtga