Страницы

Поиск по вопросам

воскресенье, 21 октября 2018 г.

Замена NULL на значение предыдущего значения

Делаю такой запрос на t-sql:
SELECT *, CASE WHEN Sum_ IS NOT NULL THEN Sum_ ELSE COALESCE(Sum_, 0) END AS first_Non_Null FROM dbo.VIEW_1; GO
Где идет обработка поля Sum_, если оно пустое, то заменяем его на 0, в противном случае оставляем без изменения. У меня вопрос такой, можно сделать так, чтобы сделать вставку не 0, а значения предыдущего числового значения.
Если, допустим, данный запрос вернет:
Index_data | Sum_ _____________________ 20.10.2015 | 8 21.10.2015 | 2 22.10.2015 | NULL 23.10.2015 | 5 24.10.2015 | NULL 25.10.2015 | NULL 26.10.2015 | 6
Переделать его так:
Index_data | Sum_ _____________________ 20.10.2015 | 8 21.10.2015 | 2 22.10.2015 | 2 23.10.2015 | 5 24.10.2015 | 5 25.10.2015 | 5 26.10.2015 | 6
Как это сделать? Хотел курсором перебрать, однако, хочется оформить это просто запросом или вложенными запросами.
SELECT *, CASE WHEN Sum_ IS NOT NULL THEN Sum_ ELSE COALESCE(Sum_, SELECT Sum_ FROM dbo.VIEW_1 WHERE ????) END AS first_Non_Null FROM dbo.VIEW_1; GO
или как-то так:
DECLARE @val nvarchar(30); SELECT *, CASE WHEN Sum_ IS NOT NULL THEN Sum_ ELSE COALESCE(Sum_, Sum_.PREV....... ) END AS first_Non_Null FROM dbo.VIEW_1; GO
Такое возможно сделать?


Ответ

Используйте функцию LAG
SELECT index_data, coalesce(Sum_, LAG(Sum_) OVER(ORDER BY index_data)) FROM dbo.VIEW_1;

Комментариев нет:

Отправить комментарий