使用同一个表中的另一个值更新列?

时间:2010-08-17 20:36:39

标签: sql sql-server sql-server-2005

设置如下:

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将是最简单的。

2 个答案:

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