Вы можете использовать следующий оператор для вычисления процента, используя COUNT()
и CASE
:
SELECT
Year,
Month,
COUNT(CASE WHEN Result = 'PUNCTUAL' THEN 1 END) * 100.0 / COUNT(*) As Success
FROM (VALUES
('DELAY', 2019, 5),
('DELAY', 2019, 1),
('PUNCTUAL', 2020, 2),
('PUNCTUAL', 2020, 2),
('PUNCTUAL', 2020, 3),
('PUNCTUAL', 2020, 3),
('PUNCTUAL', 2020, 3),
('PUNCTUAL', 2020, 3),
('DELAY', 2020, 3),
('PUNCTUAL', 2020, 3)
) v (Result, Year, Month)
GROUP BY Year, Month
ORDER BY Year, Month
Результат:
Year Month Success
2019 1 0.000000000000
2019 5 0.000000000000
2020 2 100.000000000000
2020 3 83.333333333333
Если вам нужно получить процент как текст, вы можете использовать CONCAT()
:
CONCAT(
CONVERT(numeric(10, 2), COUNT(CASE WHEN Result = 'PUNCTUAL' THEN 1 END) * 100.0 / COUNT(*)),
'%') AS SuccessFormatted