Случай, когда вместе с суммой

Существует дополнительный плательщик, который называется "Работник комп", и я пытаюсь сделать его "Работником комп / пассив", выполняя заявление "когда дело". Я пытаюсь вернуть одну строку строки. Ваша помощь будет по достоинству оценена.

Вот мой запрос:

select distinct
    case when payer.class like 'Workers%' 
        then 'Workers Comp/Liability'
        else Payer.class
    end as Payer,
    sum(Payment.payment_at) AS SumOfPmt
from Payer inner join Payer.payerid = Payment.payerid 
where payer.class like 'Workers%'
Group By payer.class      

Результат:

Payer | SumOfPmt Workers Comp/Liability | 558.76 Workers Comp/Liability | 167036.41

Что я хочу:

Payer | SumOfPmt Workers Comp/Liability | 167595.17

2 ответа

Решение

Я бы повторил то же самое CASE выражение с GROUP BY пункт:

select (case when p.class like 'Workers%' 
             then 'Workers Comp/Liability'
             else p.class
        end) as Payer,
       sum(pay.payment_at) AS SumOfPmt
from Payer p inner join 
     Payment py
     on p.payerid = py.payerid 
where p.class like 'Workers%'
group by (case when p.class like 'Workers%' 
               then 'Workers Comp/Liability'
               else p.class
          end);

Вам не нужно использовать DISTINCT так как он имеет GROUP BY,

Это будет более простая форма вашего запроса:

select 'Workers Comp/Liability' as Payer,
       sum(pm.payment_at) AS SumOfPmt
from Payer py inner join
     Payment pm
     on py.payerid = pm.payerid 
where py.class like 'Workers%';

Ваш WHERE пункт и CASE выражение делают то же самое. Нужен только один.

Другие вопросы по тегам