Was Du da machst, ist eine Pivot-Abfrage.
Auf Stackoverflow ist das schon öfter debattiert worden, klicke hier für einen beispielhaften Thread dazu.
Offen ist immer, ob man eine Pivotisierung effizienter im SQL oder im hostenden Code macht. Wenn die Zähler groß werden, würde ich eine Pivotisierung im Server bevorzugen, um die übertragene Datenmenge vom Server zur Application klein zu halten.
Eine direkte SQL Syntax zur Pivotisierung gibt's jedenfalls noch nicht. Nur Workarounds mit Subqueries oder COUNT(CASE...) Konstrukten.
Rolf