SELECT year(holidaydate),month(holidaydate),
sum(case Weekend when true then 1 else 0 end) wkEnd,
sum(case PublicHoliday when true then 1 else 0 end) pubHol
FROM Holiday
GROUP BY year(holidaydate),month(holidaydate)
Nie mam dostępnego serwera SQL. To jest testowane na mysql. Tutaj rok i miesiąc są funkcją zwracającą rok i miesiąc w dacie. Składnia CASE powinny być takie same w całej bazie danych.