Mohli byste udělejte to takto:
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
Ale jak Mikael zmínil, ve většině případů to opravdu není způsob, jakým by se to mělo dělat. Jen si pomyslete, že klient může například chtít změnit řazení v rámci kategorií, pak bude „první“ řádek v každé kategorii jiný.