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
