Заменить 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;