欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » SQLServer教程 » 正文

热门阅读

Sql Server中Pivot函数详解

创建时间:2011年08月27日 21:38  阅读次数:(9112)
分享到:
在Sql Server的帮助文档中,对Pivot函数是这样解释的:
可以使用 PIVOT 和 UNPIVOT 关系运算符对表值表达式进行操作以获得另一个表。PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来转换表值表达式,并在必要时对最终输出中所需的任何其余的列值执行聚合.

对第一次使用PIVOT函数的朋友来说,这样的解释很难让大家理解,下面编辑用PIVOT函数来实现一个行转列的功能,以便让读者更容易理解该函数.

注意:PIVOT是Sql Server2005的新函数,2005前行转列请参看本站:
SQLServer中(行列转换)行转列及列转行且加平均值及汇总值

先创建一个工资表:
Create Table Salary
(
HrName varchar(50),
Monthly varchar(50),
Money money
)

往表中插入数据:
insert into Salary(HrName,Monthly,[Money]) 
select '张三','一月','3000' 
union all
select '张三','二月','3200' 
union all
select '张三','三月','3500' 
union all
select '李四','一月','3800' 
union all
select '李四','二月','4200' 
union all
select '李四','三月','3900'
union all
select '张三','一月','2000' 

查看正常的数据:
select * from Salary

结果:
HrName  Monthly Money
张三    一月    3000.00
张三    二月    3200.00
张三    三月    3500.00
李四    一月    3800.00
李四    二月    4200.00
李四    三月    3900.00
张三    一月    2000.00


查看行转列后的数据:
select HrName as '姓名',[一月],[二月],[三月] from Salary 
pivot(sum([Money]) for Monthly in ([一月],[二月],[三月])) as pvt 

结果:
姓名   一月     二月     三月
李四  3800.00   4200.00  3900.00
张三  5000.00   3200.00  500.00


注意:
pivot(sum([Money]) for Monthly in ([一月],[二月],[三月])) 中的sum([Money]),这里必须是聚合函数,比如是min,max等。
in ([一月],[二月],[三月])中的[一月],[二月],[三月]即为Monthly的Value,又为新结果集的列名.

如果我们将其中的一月改为四月,因为数据源中没有四月的记录,所以四月查询出来应该为Null.
测试:
select HrName as '姓名',[四月],[二月],[三月] from Salary 
pivot(sum([Money]) for Monthly in ([四月],[二月],[三月])) as pvt 

结果:
姓名   四月    二月     三月
李四   NULL   4200.00   3900.00
张三   NULL   3200.00   3500.00


以上为编辑个人理解小结,仅作参考!N
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 66+29=? 的结果(结果是:95)
结  果: