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