时间:2021-07-01 10:21:17 帮助过:16人阅读
结果:
2、SELECT…CASE写法
select 姓名, max(case when 课程=‘语文‘ then 分数 end) as 语文, max(case when 课程=‘数学‘ then 分数 end) as 数学, max(case when 课程=‘物理‘ then 分数 end) as 物理 from tb group by 姓名
结果:
3、PIVOT写法
select * from (select 姓名,课程,分数 from tb) as t pivot(max(分数) for 课程 in(语文,数学,物理)) as p --分数(聚合列) --课程(转换列)
结果:
PIVOT有个郁闷的问题就是没有办法指定分组列,经过测试发现PIVOT是以除聚合列和转换列以外的所有列作为分组列,通过示例来演示我们的猜测
select 姓名,语文,数学,物理 from tb pivot(max(分数) for 课程 in(语文,数学,物理)) as p
结果:
UNPIVOT用于将列转为行,列转行相对简单很多,通常我们可以通过UNOIN ALL来实现
UNPIVOT语法:table_source PIVOT(<value_column> FOR pivot_column IN(<pivot_column_list>)) as <pivot_table_name>
示例:
1、创建表
if object_id(‘tb‘) is not null drop table tb go create table tb(姓名 varchar(10),语文 int,数学 int,物理 int) insert into tb values(‘张三‘,74,83,93) insert into tb values(‘李四‘,74,84,94) go select * from tb
结果:
2、UNION ALL写法
select * from ( select 姓名,‘语文‘ as 课程,语文 as 分数 from tb union all select 姓名,‘数学‘ as 课程,数学 as 分数 from tb union all select 姓名,‘物理‘ as 课程,物理 as 分数 from tb ) as t order by 姓名
结果:
3、UNPIVOT写法
select * from tb unpivot(分数 for 课程 in(语文,数学,物理)) as t
结果:
总结:之前也有一次用到PIVOT,结果在最近写代码的时候想不起来怎么写了,今天将PIVOT和UNPIVOT的详细用法记录下来,希望能够牢牢记住,好记性不如烂笔头嘛
T-Sql语法:行转列(pivot)和列转行(unpivot)
标签:结果 9.png style list 技术分享 union all 聚合 创建表 语法