交叉表 学习

假设有四个学科 英 物 数 化
每个每个学科添加一个数据

CREATE TABLE [dbo].[成绩] (
 [id] [int] IDENTITY (1, 1) NOT NULL ,
 [姓名] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 [学科] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 [成绩] [int] NULL
) ON [PRIMARY]

看一下这个会理好理解
declare @a varchar(2000)
set @a=''
select @a=@a+','+cast(id as varchar) from 成绩
print @a

select 姓名,
sum(case 学科 when '英语' then 成绩 else 0 end) as 英语,
sum(case 学科 when '物理' then 成绩 else 0 end) as 物理,
sum(case 学科 when'数学' then 成绩 else 0 end) as 数学,
sum(case 学科 when'化学' then 成绩 else 0 end) as 化学
from 成绩 group by 姓名

 注: 把字段放到 when 后面可以进行多条件的判断
 sum(case when 学科<>'英语' then 成绩 else 0 end) as 不是英语,

原文地址:https://www.cnblogs.com/lovebanyi/p/243741.html