1. 创建测试表
1 create table tb_class ( 2 id int identity(1,1) primary key, 3 name nvarchar(10), 4 subject nvarchar(10), 5 score smallint
6 )
2. 插入数据
1 insert into tb_class (name,subject,score) values
2 ('张三', '语文' , 80 ), 3 ('张三 ' ,'数学' , 70 ), 4 ('张三' , '英语' , 60 ), 5 ('李四 ', '语文' , 90 ), 6 ('李四 ' , '数学' , 80 ), 7 ('李四' , '英语', 100 )
3. 查看数据表
select name,subject,score from tb_class
--------------------------------------------- name subject score 张三 语文 80
张三 数学 70
张三 英语 60
李四 语文 90
李四 数学 80
李四 英语 100
4. 需求 case when转换成 科目为列标题
1 select name, 2 case subject when '语文' then score end 语文 , 3 case subject when '数学' then score end 数学, 4 case subject when '英语' then score end 英语 5 from tb_class

问题:case when之后出现许多空值
解决:使用group by聚合name列
1 select name, 2 case subject when '语文' then score end 语文 , 3 case subject when '数学' then score end 数学, 4 case subject when '英语' then score end 英语 5 from tb_class 6 group by name

报错处理,将case when用聚合功能包装一下:
1 select name, 2 max(case subject when '语文' then score end) 语文 , 3 max(case subject when '数学' then score end) 数学, 4 max(case subject when '英语' then score end ) 英语 5 from tb_class 6 group by name
