pivot语法:
SELECT a.值1 as 别名1,a.值2 as 别名2,a.值3 as 别名3,a.值... as 别名...,
FROM
table_name ---就是数据源
---开始使用函数
PIVOT
(
---这里可用聚合函数来统计
sum(要统计的列名)
FOR
--列名1就是要行转列的列名
列名1
IN ([值1],[值2],[值3],[...])---值1等来自列名1的值
) AS a ---起个名字
--这里可接分组或排序
group by 列名
下面以某个表为例演示效果:
表testtable是一个记录学生考试次数及详情的表(说法不太正常,为了演示功能就先这么办了),里面有14条数据。
要求效果图如下,分别统计每位同学三科考试的次数。
实现语句如下:
select b.Name 姓名,count(b.语文) 语文,count(b.数学) 数学,count(b.英语) 英语
from testtable
pivot(
sum(Num)
for subject
in ([语文],[数学],[英语])
)
as b
group by b.Name
这样就能直观看出,如,张三语文参加了两次语文考试,零次数学考试,两次英语考试。
如果列太多,或需要动态显示人名,可以看一下这篇文章。