各位老师:
我的问题是:表A2001、表B2002、表C2003、表D2004 分别保存了四个年份的学生成绩
他们的表结构一样都有:学号、科目、成绩
我想做个查询搜索某个学号的各年度成绩汇总:
生成表结构为
学号、科目、表A2001、表B2002、表C2003、表D2004
我的问题是:表A2001、表B2002、表C2003、表D2004 分别保存了四个年份的学生成绩
他们的表结构一样都有:学号、科目、成绩
我想做个查询搜索某个学号的各年度成绩汇总:
生成表结构为
学号、科目、表A2001、表B2002、表C2003、表D2004
学号, 科目,
2001年=max(case when 年=2001 then 成绩 else 0 end),
2002年=max(case when 年=2002 then 成绩 else 0 end),
2003年=max(case when 年=2003 then 成绩 else 0 end),
2004年=max(case when 年=2004 then 成绩 else 0 end)
from
(
select 学号, 科目, sum(成绩) as 成绩, 2001 as 年
from 表A2001
group by 学号, 科目
union all
select 学号, 科目, sum(成绩) as 成绩, 2002 as 年
from 表A2002
group by 学号, 科目
union all
select 学号, 科目, sum(成绩) as 成绩, 2003 as 年
from 表A2003
group by 学号, 科目
union all
select 学号, 科目, sum(成绩) as 成绩, 2004 as 年
from 表A2004
group by 学号, 科目
)tmp
group by 学号, 科目, 年
create table T2(学号 nvarchar(10), 科目 nvarchar(10), 成绩 int)
create table T3(学号 nvarchar(10), 科目 nvarchar(10), 成绩 int)insert T1 select 'A001', '语文', 80
insert T1 select 'A001', '数学', 82
insert T1 select 'A002', '语文', 84insert T2 select 'A003', '英语', 80 insert T3 select 'A001', '数学', 85
insert T3 select 'A004', '语文', 86select
学号, 科目,
[2001年]=max(case when 年=2001 then 成绩 else 0 end),
[2002年]=max(case when 年=2002 then 成绩 else 0 end),
[2003年]=max(case when 年=2003 then 成绩 else 0 end)
from
(
select 学号, 科目, sum(成绩) as 成绩, 2001 as 年
from T1
group by 学号, 科目
union all
select 学号, 科目, sum(成绩) as 成绩, 2002 as 年
from T2
group by 学号, 科目
union all
select 学号, 科目, sum(成绩) as 成绩, 2003 as 年
from T3
group by 学号, 科目
)tmp
group by 学号, 科目
order by 学号
---------- ---------- ----------- ----------- -----------
A001 数学 82 0 85
A001 语文 80 0 0
A002 语文 84 0 0
A003 英语 0 80 0
A004 语文 0 0 86(所影响的行数为 5 行)