在SQL Server 2008中使用PIVOT

前端之家收集整理的这篇文章主要介绍了在SQL Server 2008中使用PIVOT前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我在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).

查询是可行的,但您现在需要动态sql.

…就像是:

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;

猜你在找的MsSQL相关文章