Мы создаем команды SQL с инструкциями CASE из нашего приложения и запускаем их в базе данных (любой базе данных, а не конкретно сервере SQL). Сначала мы определяем количество столбцов сводки и их имена, используя один запрос, из этих результатов мы генерируем следующий запрос.
Таким образом, первый запрос для определения столбцов выглядит примерно так:
SELECT DISTINCT myField FROM myTable
Затем мы используем все значения в этом результате для создания команды SQL, в которой для каждого значения создается оператор CASE.
Мы хотели получить независимое от базы данных решение, поэтому мы выполняем эту обработку вне базы данных, но я уверен, что вы можете сделать то же самое в хранимой процедуре с самим сервером SQL.