Делаю такой запрос на 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;
Комментариев нет:
Отправить комментарий