假设我在sql Server 2008表或[table] -typed变量中有一些数据:
author_id review_id question_id answer_id 88540 99001 1 719 88540 99001 2 720 88540 99001 3 721 88540 99001 4 722 88540 99001 5 723 36414 24336 1 302 36414 24336 2 303 36414 24336 3 304 36414 24336 4 305 36414 24336 5 306
我想检索数据作为结果集,如下所示:
author_id review_id 1 2 3 4 5 88540 99001 719 720 721 722 723 36414 24336 302 303 304 305 306
我怀疑PIVOT操作符是我需要的(根据this post,无论如何),但我无法弄清楚如何开始,特别是当表中的question_id行数可能不同时.在上面的示例中,它是5,但在另一个查询中,该表可能会填充7个不同的问题.
解决方法
实际上,你最好在客户端做这件事.假设您正在使用Reporting Services,请根据您的第一个结果集获取数据,并使用Matrix显示数据,行组中包含author_id和review_id,列组中包含question_id,中间包含MAX(answer_id).
…就像是:
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,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;