2016-03-08 5 views
0

В SQL Server я пытаюсь обновить нулевые поля в таблице с существующими значениями в таблице.Поля обновления - SQL Server

Пример:

Таблица имеет 4 колонки: A, B, C, D

A  B  C  D 
1  2  3  4 
5  Null Null 4 

Как можно заполнить пустые значения со значениями в B, C, где D = 4

Update Table 
Set B=B 
Where B is null 
and D=4 
+0

Я не совсем понимаю, вопрос: Что вы обновляете нулями? B и C являются нулевыми. вы хотите, чтобы их скопировали из строки A1 в A5? Для этого нам может понадобиться больше контекста. Вы можете сделать лаг и на основе порядка и заполнить его таким образом, но это сломается, если у вас есть 2 нуля в консекутирующих строках. – LordBaconPants

ответ

1

Одним из вариантов является использование self join:

update t 
set t.b = t2.b 
from yourtable t 
    join yourtable t2 on t.d = t2.d 
        and t2.b is not null 
where t.b is null 

Что делать, если существует несколько записей для b, сгруппированных по d, где b не является нулевым? Это может испортить это. Вместо этого вам придется решить, какое значение использовать. Вот пример выбирая min:

update t 
set t.b = t2.b 
from yourtable t 
    join (select d, min(b) b 
      from yourtable 
      where b is not null 
      group by d) t2 on t.d = t2.d 
where t.b is null 

Или с корреляцией подзапроса:

update yourtable t 
set b = (select min(b) from yourtable t2 where t.id = t2.id) 
where t.b is null 

Много вариантов здесь ...

+0

Я хочу обновить нулевые поля, где d - то же самое. Если D = 4 для 3 записей, значения в b и c могут быть разными, но я хочу, чтобы они отображались в любой строке, где в столбцах b и c, где D = 4. – Jeff

+0

@Jeff - все эти запросы делают именно это ... Что делать, если 'd' одинаково, но имеет несколько значений' b', которые не являются 'null'? Какое значение вы используете? Вот что этот ответ пытается решить для вас. Зависит от того, что вы пытаетесь сделать. Однако эти параметры должны быть близкими. – sgeddes

+0

Я попробую и дам вам сейчас. Спасибо за помощь. – Jeff

Смежные вопросы