Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 用下一个非空值填充列空值_Sql Server 2005_Tsql - Fatal编程技术网

Sql server 2005 用下一个非空值填充列空值

Sql server 2005 用下一个非空值填充列空值,sql-server-2005,tsql,Sql Server 2005,Tsql,是否有一个简单的查询可以用该列中的下一个非空值来填补该列中的空白?我想要一个包含如下数据的列: -------------------- | ID | Version | -------------------- | 1 | '162.39' | -------------------- | 2 | NULL | -------------------- | 3 | NULL | -------------------- | 4 | '162.4

是否有一个简单的查询可以用该列中的下一个非空值来填补该列中的空白?我想要一个包含如下数据的列:

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

是的,您可以使用包含相关子查询的查询,该查询将返回其下方ID的前1个值。类似以下内容:(注意仅来自内存的代码)


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

是的,您可以使用包含相关子查询的查询,该查询将返回其下ID的前1个值。类似以下内容:(注意仅来自内存的代码)

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

尝试以下操作:

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
我没有试过,也许你需要修改一些细节。

试试这个:

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

我没有尝试过,也许你需要修改一些细节。

@sll我不知道这有什么区别,ID没有更新?我只是想确定我的想法是否可以实现,这取决于下一条记录的ID都大于previous@sll我看不出有什么区别,ID没有得到更新?我只是想确定我的想法是否能够实现,这取决于下一条记录的ID大于上一条记录的事实