Вернуть вместо null 0
Хочу вернуть вместо null - 0, пробую через COALESCE, но не выходит, ругается на синтаксис перед )) proc_month
WITH cte as (
select
type_room_rus, period,
case
when type_room_rus is not null then sum(price) / sum(area) end as price_g,
lag(sum(price) / sum(area), 1) over (
partition by type_room_rus
order by period
) prev
from pbi#12_everyweekly
where status_kv = 'AVAILABLE' and zhk is not null
group by type_room_rus, period
)
select
type_room_rus,
period,
price_g,
COALESCE(format (
((price_g - prev) / prev) * 100,
'n'
), 0) proc_month
from cte
Данная ошибка вылазит, после моего запроса
Msg 245, Level 16, State 1, Line 13 Ошибка преобразования значения nvarchar "4,98" в тип данных int.
Скриншот, где нужно заменить null на 0
Ответы (2 шт):
Автор решения: Vitaliy Zlobin
→ Ссылка
Сначала вычисляешь данные, в конце приводишь к нужному виду:
;WITH CTE AS
(
SELECT type_room_rus,
period,
CASE WHEN type_room_rus IS NOT NULL THEN SUM(price) / SUM(area) END AS price_g,
LAG(SUM(price) / SUM(area), 1) OVER(PARTITION BY type_room_rus ORDER BY period) AS prev
FROM pbi#12_everyweekly
WHERE status_kv = 'AVAILABLE'
AND zhk IS NOT NULL
GROUP BY type_room_rus, period
)
SELECT type_room_rus,
period,
price_g,
COALESCE((price_g - prev) / prev * 100, 0) AS proc_month
FROM CTE
Автор решения: Qwertiy
→ Ссылка
COALESCE(format ( ((price_g - prev) / prev) * 100, 'n' ), 0) proc_month
format(
COALESCE((price_g - prev) / prev, 0) * 100,
'n'
) proc_month
