使用下一个非空值填充列空值

时间:2012-03-02 12:31:00

标签: sql-server-2005 tsql

是否有一个简单的查询来填充列中的空白,该列中的下一个非空值?我想要一个包含这样数据的列:

--------------------
| 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

2 个答案:

答案 0 :(得分: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 :(得分: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

然后,您可以使用此查询来启动更新语句以更新您的表。