SQL Server Pivot函数的用法总结

  曾经遇到过一个这样的需求,需要将数据库中地区字段下的省份转换为列名,想到了pivot函数

  假如这是我们的数据:

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 

我希望显示的结果是这样的(也就是question_id列的值全部转换为列名)

 
author_id     review_id     1     2     3     4     5 
88540         99001         719   720   721   722   723 
36414         24336         302   303   304   305   306 

那么我的使用pivot的t-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, 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; 


 

 

转载于:https://www.cnblogs.com/jsdmz/archive/2011/05/13/2045272.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值