是否有一个简单的查询来填充列中的空白,该列中的下一个非空值?我想要一个包含这样数据的列:
--------------------
| 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 :(得分: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
然后,您可以使用此查询来启动更新语句以更新您的表。