SQL Server требует, чтобы все значения столбцов были предварительно определены для оператора PIVOT. Единственный способ сделать это в SP - сначала запросить все значения столбцов, затем создать команду PIVOT в виде строки и передать ее sp_executesql, чтобы получить ответ.
Я бы предложил использовать службы отчетов SQL Server. Вы можете использовать элемент управления ReportViewer только в режиме клиента и даже не требовать установки компонентов сервера. Затем вы можете создать матричный отчет, который рассчитает, что вам нужно.
http://msdn.microsoft.com/en-us/library/ms251671.aspx
Не позволяйте MSDN отпугнуть вас. Это действительно так же просто, как установить элемент управления на свой компьютер (и веб-сервер); Visual Studio будет иметь подключаемый модуль конструктора отчетов, который открывается всякий раз, когда вы открываете файл RDLC. Он также добавляет параметр «Отчет» в меню «Добавить новый ...».
Вы можете сделать это вручную и в C #. Вам не нужно повторно запрашивать. Независимо от того, используете ли вы элемент управления ReportViewer или делаете это самостоятельно, вы просто извлекаете список из процедуры как большой стек строк о человеке / собрании. Если вы используете .NET 4, то LINQ to Objects сделает процесс создания в простом C # простым процессом при создании HTML-таблицы.