2010-08-17 5 views
3

Установка такова:Обновить столбец с другим значением из той же таблицы?

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

упрощенный, очевидно. То, что я хочу сделать, это обновить Col2 везде, где это Null, установив его в значение Col2 для того, что имеет самое близкое значение в Col1 (так что в этом примере четвертая строка должна иметь 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 будет самым простым.

ответ

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

Работает как очарование. Благодаря! – extarbags

1

Martin,

Это работает. Ниже приведен пример использования вашего решения:

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 
Смежные вопросы