Вот динамическая версия
Тестовый стол
create table #test(id int,name char(1),line char(1))
insert #test values(1 , 'A','Z')
insert #test values(2 , 'B','Y')
insert #test values(3 , 'C','X')
insert #test values(4 , 'C','W')
insert #test values(5 , 'D','W')
insert #test values(5 , 'D','W')
insert #test values(5 , 'D','P')
Теперь запустите это
declare @names nvarchar(4000)
SELECT @names =''
SELECT @names = @names + line +', '
FROM (SELECT distinct line from #test) x
SELECT @names = LEFT(@names,(LEN(@names) -1))
exec('
SELECT *
FROM(
SELECT DISTINCT Id, Name,Line
FROM #test
) AS pivTemp
PIVOT
( COUNT(Line)
FOR Line IN (' + @names +' )
) AS pivTable ')
Теперь добавьте одну строку в таблицу и снова выполните запрос выше, и вы увидите B
insert #test values(5 , 'D','B')
Осторожно : Конечно, все проблемы с динамическим SQL применимы, если вы можете использовать sp_executeSQL, но так как параметры не используются, как в запросе, в действительности нет никакого смысла