Я думаю, у вас должна быть справочная таблица для этой цели.Если у вас его нет, вы можете собрать его вместе в самом запросе:
select t.category, sum(v.satisfaction_val)
from t cross join
(values ('Excellent', 5),
('Good', 4),
('Neutral', 2),
('Dissatisfied', 0)
) v(satisfaction, satisfaction_val)
on t.satisfaction = v.satisfaction
group by t.category;
Это лучшее решение, чем просто использование выражения case
в строке, потому что значения можно перезаписать-используемый.Например, если вы хотите получить общее количество положительных ответов, вы можете сделать следующее:
select t.category, sum(v.satisfaction_val),
sum(case when v.satisfaction_value > 3 then 1 else 0 end)