Обновить столбец другим значением из той же таблицы? - PullRequest
3 голосов
/ 18 августа 2010

Установка выглядит следующим образом:

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 будет самым простым.

Ответы [ 2 ]

3 голосов
/ 18 августа 2010

Это довольно сложно попробовать без настройки базы данных, но работает ли это?

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 голос
/ 18 августа 2010

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...