Вернуть вместо 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
→ Ссылка