
在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
以上为编辑个人理解小结,仅作参考!
本文来源于:http://www.lmwlove.com/ac/ID551
总结以上是内存溢出为你收集整理的sqlserver中pivot的使用全部内容,希望文章能够帮你解决sqlserver中pivot的使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)