Больно делать перестановки строк / столбцов в SQL. Каждую строку, которую вы хотите превратить в столбец, вы должны явно указать. Поэтому, если у вас много категорий, ваш запрос будет очень длинным, и он будет меняться каждый раз, когда вы добавляете / удаляете / меняете категорию (это, вероятно, метод CASE, который вы упоминаете). Вы можете написать хранимую процедуру для генерации, которая будет генерировать этот запрос для вас (или иным образом создать желаемый набор результатов), но, честно говоря, в этом и заключается безумие (и, вероятно, ужасная производительность).
Возьмите данные в виде строк, как, безусловно, хочет их предоставить SQL, и затем приложение преобразует их в столбцы. Это будет намного проще, чем заставлять SQL делать то, чего он не хочет.