Заменить NULL-значения в столбце нулями при условии

Я новичок в базах данных и запросах SQL Server.

У меня есть таблица базы данных SQL Server с DateTime и Current. Ток может иметь значения NULL.

Я хочу заменить значения NULL в столбце Current на нули только в том случае, если в предыдущей или следующей записи есть какое-либо значение. Предусмотренный DateTime отсортирован в порядке возрастания.

Пожалуйста, помогите мне написать запрос SQL или комбинацию хранимой процедуры и запроса SQL.

Также помогите мне отсортировать существующую таблицу с DateTime в порядке возрастания. DateTime не является бегущей серией.

Образец таблицы

1 ответ

Решение

Вы можете использовать обновляемые CTE и оконные функции:

with toupdate as (
      select t.*, lag(current) over (order by datetime) as prev_current,
             lead(current) over (order by datetime) as next_current
      from t
     ) 
update toupdate
    set current = 0
    where current is null and (prev_current is not null or next_current is not null);

Если вы просто хотите дополнительный столбец в select запрос (в отличие от изменения данных), затем:

with t as (
      select t.*, lag(current) over (order by datetime) as prev_current,
             lead(current) over (order by datetime) as next_current
      from t
     ) 
select t.*,
       (case when current is null and (prev_current is not null or next_current is not null)
             then 0 else current
        end) as new_current
from t;
Другие вопросы по тегам