Sie könnten mach es so:
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
Aber wie Mikael erwähnte, ist dies – in den meisten Fällen – wirklich nicht so, wie es gemacht werden sollte. Denken Sie nur, dass der Kunde zum Beispiel die Sortierung innerhalb der Kategorien ändern möchte, dann wird die 'erste' Zeile innerhalb jeder Kategorie eine andere sein.