Я создал хранимую процедуру с именем pivot_query, чтобы сделать оператор PIVOT более гибким. Источник для этого здесь . Существует также пример того, как его использовать.
Заимствование части кода из OMG Ponies ниже и изменение запроса немного,
тогда вызов pivot_query будет выглядеть так:
declare @mySQL varchar(MAX)
set @mySQL = '
SELECT
t.id,
t.name,
''Name'' + cast(ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY t.name) as varchar(2)) rank
FROM
TestData t'
exec pivot_query @mySQL, 'Id', 'rank', 'max(Name)'
и результаты теперь выглядят так:
Id Name1 Name2 Name3 Name4 Name5 Name6
---------- ----- ----- ----- ----- ----- -----
1 A B NULL NULL NULL NULL
2 C NULL NULL NULL NULL NULL
3 D NULL NULL NULL NULL NULL
4 A D E F G H
Не совсем уверен, что вы пытаетесь показать, хотя. : -)
Это по сути не ограничит вывод шестью столбцами имен, но будет продолжать расти, пока вы не добавите предложение where для специального исключения рангов выше 6.