2012-03-02 47 views
0

是否有一個直接查詢來填充列中的下一個非空值的列中的空位?我想,其具有這樣的數據的列:填充具有下一個非空值的列空值

-------------------- 
| ID | Version  | 
-------------------- 
| 1 | '162.39' | 
-------------------- 
| 2 | NULL  | 
-------------------- 
| 3 | NULL  | 
-------------------- 
| 4 | '162.40' | 
-------------------- 
| 5 | '162.41' | 
-------------------- 
| 6 | NULL  | 
-------------------- 
| 7 | NULL  | 
-------------------- 
| 8 | '162.42' | 
-------------------- 
| 9 | '162.42' | 
-------------------- 
| 10 | NULL  | 
-------------------- 

落得這樣

-------------------- 
| ID | Version  | 
-------------------- 
| 1 | '162.39' | 
-------------------- 
| 2 | '162.40' | 
-------------------- 
| 3 | '162.40' | 
-------------------- 
| 4 | '162.40' | 
-------------------- 
| 5 | '162.41' | 
-------------------- 
| 6 | '162.42' | 
-------------------- 
| 7 | '162.42' | 
-------------------- 
| 8 | '162.42' | 
-------------------- 
| 9 | '162.42' | 
-------------------- 
| 10 | NULL  | 
-------------------- 

的最後一個值(一個或多個)可以是'162.42'或保持在NULL

+0

是否爲ID自動增量? – sll 2012-03-02 12:40:23

+0

@sll我沒有看到有什麼區別,ID沒有得到更新? – robertc 2012-03-02 12:51:09

+1

我只是想確定我的想法是否可以實施,它依靠的事實是每個下一個記錄的ID大於先前的 – sll 2012-03-02 14:51:12

回答

3

試試這個:

UPDATE table t1 
SET Version = (
       SELECT TOP 1 Version 
       FROM table t2 
       WHERE t2.id > t1.id 
        AND Version IS NOT NULL 
       ORDER BY t2.ID ASC 
      ) 
WHERE t1.Version IS NULL 

我沒有嘗試它,也許你會必須解決一些細節。

+1

我不得不通過'ORDER BY t2.ID ASC'來使它工作 – robertc 2012-03-02 16:06:00

1

是的,您可以使用包含相關子查詢的查詢,該查詢將返回其下面的Ids的前1個值。類似以下內容:(注意代碼僅來自內存)

SELECT T1.Id, (SELECT TOP 1 Version FROM MyTable T2 WHERE T2.Id > T1.Id AND Version IS NOT NULL ORDER BY T2.Id ASC) 
FROM MyTable T1 
WHERE T1.Version IS NULL 

然後,您可以使用此查詢來更新您的表的更新語句。