sql - 用同一张表中的另一个值更新列?

标签 sql sql-server sql-server-2005

设置是这样的:

Col1        Col2
12345       12  
12348       14
20145       16
00541       Null
51234       22

显然,简化了。我想要做的是通过将 Col2 设置为 Col1 中具有最接近值的任何值的 Col2 值来更新 Col2,无论它是否为 Null(因此在本示例中,第四行应将 Col2 设置为 12)。这是我得到的结果:

UPDATE Temp.dbo.Sheet4
   SET Col2 = (SELECT FIRST(Col2) 
                 FROM Temp.dbo.Sheet4 
                WHERE Col2 IS NOT NULL 
             ORDER BY ABS(***Col1 from the outside of this select statement*** - Col1))
WHERE Col2 IS NULL

可能不是那么接近。但是我该怎么做呢?我无法完全理解它。我也愿意在 Excel/Access/其他软件中执行此操作,但我认为 SQL Server 是最简单的。

最佳答案

在没有设置数据库的情况下尝试这个有点困难,但这行得通吗?

UPDATE sh
   SET sh.Col2 = (SELECT TOP 1 sh_inner.Col2
                 FROM Temp.dbo.Sheet4 sh_inner
                WHERE sh_inner.Col2 IS NOT NULL 
             ORDER BY ABS(sh.Col1 - sh_inner.Col1))
FROM Temp.dbo.Sheet4 sh
WHERE sh.Col2 IS NULL

关于sql - 用同一张表中的另一个值更新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3506728/

相关文章:

.net - 在 SQL Server 2005 上进行生产并针对 SQL Server 2008 进行开发的风险有多大

php - MySQL 哪里有很多多对多的匹配项?

mysql - 插入临时表mysql

sql server 'in' 或 'or' - 最快

sql - 如何在 SQL Server 中将自连接限制为 Top 1

sql - 对组中上次更新的数据求和

sql - 在 SQL Server 2005 中使用 MD5 在 varbinary 上执行校验和文件

sql - 在Oracle中执行ORDER BY后+0是什么意思

用于从特定字符串中提取数字的 Mysql 正则表达式或函数

MySQL选择最大日期并在准确日期下订单