一、行转列
建表:
if object_id('mytest')is not null drop table mytest
go
create table mytest(姓名 varchar(10),课程 varchar(10),分数 int)
insert into mytest values('小明','化学',86)
insert into mytest values('小明','数学',77)
insert into mytest values('小明','物理',87)
insert into mytest values('小华','化学',86)
insert into mytest values('小华','数学',84)
insert into mytest values('小华','物理',94)
go
select * from mytest
姓名 课程 分数
---------- ---------- -----------
小明 化学 86
小明 数学 77
小明 物理 87
小华 化学 86
小华 数学 84
小华 物理 94
(6 行受影响)
现在的问题是:我想根据姓名统计这个人的三门成绩,即:姓名 化学 数学 物理
首先看看使用case when end结构的时候:
select 姓名,
max(case 课程 when '化学' then 分数 else 0 end) 化学,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from mytest
group by 姓名
姓名 化学 数学 物理
---------- ----------- ----------- -----------
小华 86 84 94
小明 86 77 87
(2 行受影响)
这个结果就是我们想要的,然后再看看使用pivot:
select * from mytest pivot(max(分数) for 课程 in (化学,数学,物理))a
姓名 化学 数学 物理
---------- ----------- ----------- -----------
小华 86 84 94
小明 86 77 87
(2 行受影响)
求出平均分、总分:
select 姓名,
max(case 课程 when '化学' then 分数 else 0 end) 化学,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理,
sum(分数) 总分,
cast(avg(分数*1.0) as decimal(18,2)) 平均分
from mytest
group by 姓名
姓名 化学 数学 物理 总分 平均分
---------- ----------- ----------- ----------- --------- ---------
小华 86 84 94 264 88.00
小明 86 77 87 250 83.33
二、列转行
1、建立表格
if object_id('mytest') is not null
drop table mytest
go
create table mytest(姓名 varchar(10),化学 int,数学 int,物理 int)
insert into mytest values('小明',86,77,87)
insert into mytest values('小华',86,84,94)
go
select * from mytest
go
姓名 化学 数学 物理
---------- ----------- ----------- -----------
小明 86 77 87
小华 86 84 94
使用SQL Server 2005静态SQL
select 姓名,课程,分数 from mytest unpivot (分数 for 课程 in([化学],[数学],[物理])) t
sql server行列转换案例
来源:这里教程网
时间:2026-03-02 11:03:54
作者:
编辑推荐:
- sql server行列转换案例03-02
- SQLServer常见问题03-02
- sql server阻塞查询语句03-02
- rebuild index online for SQL server03-02
- [SQLSERVER] sqlserver T-SQL 执行detach/attach,copy 命令03-02
- AwaysOn灾备恢复演练问题处理03-02
- 如何查看备份集的LSN号03-02
- SQL Server 2008性能故障排查(一)——概论03-02
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- SQL Server 2008性能故障排查(一)——概论
SQL Server 2008性能故障排查(一)——概论
26-03-02 - sqlserver2008 事务日志文件(.LDF)丢失风险实验
sqlserver2008 事务日志文件(.LDF)丢失风险实验
26-03-02 - 电脑通用串行接口USB接口标准和传输数率,如何才能提高传输速率
电脑通用串行接口USB接口标准和传输数率,如何才能提高传输速率
26-03-02 - 最全电脑主板接口充电基础教程
最全电脑主板接口充电基础教程
26-03-02 - ArcView Spacial Analyst v2.0 1CD
ArcView Spacial Analyst v2.0 1CD
26-03-02 - 关于SQLServer 时间格式化
关于SQLServer 时间格式化
26-03-02 - Transact-SQL 参考_sql_replqueuemonitor
Transact-SQL 参考_sql_replqueuemonitor
26-03-02 - 给台式机电脑插上一个USB无线网卡,上网变得很简单了
给台式机电脑插上一个USB无线网卡,上网变得很简单了
26-03-02 - SQL Server 2008性能故障排查(二)——CPU
SQL Server 2008性能故障排查(二)——CPU
26-03-02 - 使用 FOR XML PATH 、CTE、PIVOT 產生動態欄位統計表
使用 FOR XML PATH 、CTE、PIVOT 產生動態欄位統計表
26-03-02
