case when 行转列,出现空值处理


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

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM