Sql数据库表横行变纵列---pivot行转列(行值转列名)

本文介绍了如何使用SQL的PIVOT操作将数据表中的行转换为列,以实现特定列的统计分析。通过创建临时表并插入数据,然后运用PIVOT函数结合COUNT聚合函数,展示了如何统计每个科目在不同日期下的课程安排次数。通过调整PIVOT内的聚合函数和IN子句,可以灵活地根据需求变换输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

语法

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]

f_date in (···)是最后要显示的转换过来的列吗,名

group by 是对这个临时表的一个分组,通过分组对象得到去重后对应的转换列的值

同理列转行也一样:

unpivot 列名转行值_青~的博客-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值