加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver中pivot的使用

发布时间:2020-12-12 14:54:17 所属栏目:MsSql教程 来源:网络整理
导读:? 在Sql Server的帮助文档中,对Pivot函数是这样解释的: 可以使用 PIVOT 和 UNPIVOT 关系运算符对表值表达式进行操作以获得另一个表。PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来转换表值表达式,并在必要时对最终输出中所需的任何其余的列
?


在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读