Je zou doe het als volgt:
SELECT
CASE WHEN ROW_NUMBER() OVER(PARTITION BY Category ORDER BY BudgetType) = 1
THEN Category ELSE NULL END AS 'Category Caption'
, Category
, BudgetType
FROM yourTable
ORDER BY Category, BudgetType
Maar zoals Mikael al zei, is dit - in de meeste gevallen - echt niet de manier waarop het zou moeten worden gedaan. Bedenk dat de klant bijvoorbeeld de sortering binnen de categorieën wil veranderen, dan is de 'eerste' rij binnen elke categorie een andere.