设置如下:
Col1 Col2
12345 12
12348 14
20145 16
00541 Null
51234 22
显然是简化的。我想要做的是通过将Col2设置为Col1值(在Col1中具有最接近值的任何值)来更新Col2(因此在此示例中,第四行应将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将是最简单的。
答案 0 :(得分:3)
如果没有设置数据库,很难尝试这个,但是这有用吗?
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
答案 1 :(得分:1)
马丁,
有效。以下是使用您的解决方案的示例:
create table #junk
(col1 int, col2 int)
insert #junk
values(12345,12),
(12348,14),
(20145,16),
(541,null),
(51234,22)
update j
set col2 = (select top 1 j2.col2 from #junk j2 where j2.col2 is not null order by ABS(j.col1-j2.col1))
from #junk j where col2 is null
select * from #junk
drop table #junk