Eigentlich wäre es besser, dies im Client zu tun. Angenommen, Sie verwenden Reporting Services, rufen Sie die Daten gemäß Ihrem ersten Ergebnissatz ab und zeigen Sie sie mithilfe einer Matrix an, mit author_id und review_id in der Zeilengruppe, question_id in der Spaltengruppe und MAX(answer_id) in der Mitte.
Eine Abfrage ist machbar, aber Sie würden jetzt dynamisches SQL benötigen.
...etwas wie:
DECLARE @QuestionList nvarchar(max);
SELECT @QuestionList = STUFF(
(SELECT ', ' + quotename(question_id)
FROM YourTable
GROUP BY question_id
ORDER BY question_id
FOR XML PATH(''))
, 1, 2, '');
DECLARE @qry nvarchar(max);
SET @qry = '
SELECT author_id, review_id, ' + @QuestionList +
FROM (SELECT author_id, review_id, question_id, answer_id
FROM YourTable
)
PIVOT
(MAX(AnswerID) FOR question_id IN (' + @QuestionList + ')) pvt
ORDER BY author_id, review_id;';
exec sp_executesql @qry;