Potresti fallo in questo modo:
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
Ma come ha detto Mikael, questo - nella maggior parte dei casi - non è proprio il modo in cui dovrebbe essere fatto. Basti pensare che il cliente potrebbe, ad esempio, voler modificare l'ordinamento all'interno delle categorie, quindi la "prima" riga all'interno di ogni categoria sarà diversa.