Tú podrías hazlo así:
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
Pero como mencionó Mikael, esta no es, en la mayoría de los casos, la forma en que debe hacerse. Solo piense que el cliente puede, por ejemplo, querer cambiar la clasificación dentro de las categorías, entonces la 'primera' fila dentro de cada categoría será diferente.