Заменить NULL-значения в столбце нулями при условии - PullRequest
0 голосов
/ 07 февраля 2019

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

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

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

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

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

Sample Table

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете использовать обновляемые 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;
...