sqlserver中pivot的使用
来源:互联网 发布:php 手机验证码逻辑 编辑:程序博客网 时间:2024/06/06 00:16
在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函数中聚合函数的使用意义及选择
- sqlserver PIVOT和UNPIVOT使用
- 浅谈SQLServer行列转换PIVOT函数的使用
- Oracle 中 unpivot 与 pivot 的使用范例
- SQL中PIVOT的用法
- OLAP函数系列2:SqlServer中pivot与UNPIVOT
- SqlServer 行转列函数pivot
- 在Spark中使用Pivot重塑数据
- PIVOT使用
- pivot使用
- sqlserver中case的使用
- SqlServer中触发器的使用
- SqlServer中触发器的使用 .
- sqlserver中identity的使用
- 如何在 Windows Phone 应用程序的一个 Pivot 控件中使用不同的应用程序栏
- ORACLE中一个简单的PIVOT例子
- 使用pivot进行报表的行转列
- lua第三方库
- C/C++与Lua交互(C实现的Lua编译器的例子)
- tomcat中获取的时间与PC机时间不同
- book-I
- GenericFilterBean-api
- sqlserver中pivot的使用
- cout和printf的缓冲机制
- 窗里窗外
- COM编程入门第一部分——什么是COM,如何使用COM
- Android开发教程:蓝牙测试
- GCC后端及汇编发布(42)
- android开发环境配置
- GCC's bacl-end & assemble emission (42)
- GCC后端及汇编发布(43)