Вы можете попробовать это с помощью динамического сводного запроса.
create table #temp (ID int, question varchar(20), answer char(1))
insert into #temp values
(1, 'who', 'A'),
(1, 'where', 'B'),
(1, 'when', 'C'),
(1, 'how', 'D')
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question)
FROM #temp c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT Id, ' + @cols + ' from
(
select Id
,question
, answer
from #temp
) x
pivot
(
max(answer)
for question in (' + @cols + ')
) p '
execute(@query)
Live Demo