语法
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 列名
创建一个临时表来测试
create table #table(
t_id int,
t_subject varchar(10),
t_date int,
)
insert into #table VALUES (1,'语文',20210401)
insert into #table VALUES (2,'数学',20210401)
insert into #table VALUES (3,'英语',20210402)
insert into #table VALUES (4,'语文',20210402)
insert into #table VALUES (5,'语文',20210403)
insert into #table VALUES (6,'数学',20210403)
insert into #table VALUES (7,'英语',20210404)
insert into #table VALUES (8,'数学',20210404)
转换代码
select a.t_subject,a.[20210401],a.[20210402],a.[20210403],a.[20210404]
from #table
pivot(
--sum(t_id)
count(t_id)
for
t_date in ([20210401],[20210402],[20210403],[20210404])
)a
结果--得到对应日期下科目的课程安排
select a.t_subject,a.[20210401],a.[20210402],a.[20210403],a.[20210404]
from #table
pivot(
sum(t_id)
--count(t_id)--查找资料说这里必须使用聚合函数
for
t_date in ([20210401],[20210402],[20210403],[20210404])
)a
得到对应日期下相同科目的ID之和 ---因为没有相同科目对应不同ID,所以也就显示为对应ID了
总结:
--其实就是一个表间接生成一个临时的group by分组的一个表
显示的内容就是对应pivot后面聚合函数的结果,后面没有跟group by 即默认为select 后面的字段
=group by a.t_subject,a.[20210401],a.[20210402],a.[20210403],a.[20210404]