SQL Server не имеет ничего (насколько я знаю), которое может поворачиваться к динамическому количеству столбцов.
Кроме того, вы обнаружите, что вам нужны разные имена для разных столбцов, и поэтому необходим механизм динамического именования столбцов.
Самое близкое, что вы можете получить, это написать SQL, который пишет SQL, а затем выполнить его. Я, конечно, не хотел бы идти этим путем.
На мой взгляд, лучший подход - это поворот данных в вашем клиенте. Как правило, я стараюсь не заниматься вопросами форматирования / размещения / представления на SQL Server. Я считаю, что лучше просто обеспечить, чтобы представленные результаты давали полную, точную и согласованную информацию, чтобы приложение могло делать то, что оно хочет.
(Это позволяет вашему SQL относиться к данным не зависимо от их использования. Это означает, что изменения в приложении с меньшей вероятностью потребуют изменений в SQL.)