2013-11-26 21 views
2

SQL Server的問題上面或下面的值更新: 我有一個表中的數據可能看起來像這樣的:如何使用來自行

Row Group Value 
1 a  0  
2 a  545  
3 a  898  
4 a  787  
5 b  654  
6 b  438  
7 b  0  
8 c  0  
9 c  889  
10 c  551  
11 c  0  
12 c  0 

我想upate行,其中值= 0。規則是 - 如果該組的第一行(即group = a row = 1)= 0的值,則用該組的下一個值更新值,即第2行的值= 545.此規則僅適用於第一行並且它必須等於0.

如果組中任何其他行的值(即group = b row = 6)= 0,則用先前值0123更新> 0,直到所有值爲<> 0爲該組列表。

我想這樣做沒有循環/光標等任何人都看到了一種方式?謝謝。

最終的結果應該是這樣的:

Row Group Value  
1 a  545  
2 a  545  
3 a  898  
4 a  787  
5 b  654  
6 b  438  
7 b  438  
8 c  889  
9 c  889  
10 c  551  
11 c  551  
12 c  551 
+0

的SQL Server版本您使用的? –

回答

1
UPDATE t_base 
    SET [Value] = COALESCE(t_prev.[Value], t_next.[Value], t_base.[Value]) 
FROM MyTable t_base 
CROSS APPLY (
    SELECT TOP 1 [Value] 
    FROM MyTable 
    WHERE [Group] = t_base.[Group] 
    AND [Row] < t_base.[Row] 
    AND [Value] <> 0 
    ORDER BY [Row] DESC 
) t_prev 
CROSS APPLY (
    SELECT TOP 1 [Value] 
    FROM MyTable 
    WHERE [Group] = t_base.[Group] 
    AND [Row] > t_base.[Row] 
    AND [Value] <> 0 
    ORDER BY [Row] ASC 
) t_next 
+0

謝謝!你爲我笨拙的嘗試提供了缺失的元素。 – user3037426

相關問題