各位老师:
我的问题是:表A2001、表B2002、表C2003、表D2004 分别保存了四个年份的学生成绩
他们的表结构一样都有:学号、科目、成绩
我想做个查询搜索某个学号的各年度成绩汇总:
生成表结构为
学号、科目、表A2001、表B2002、表C2003、表D2004

解决方案 »

  1.   

    tryselect 
    学号, 科目, 
    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 学号, 科目, 年
      

  2.   

    --修改一下create table T1(学号 nvarchar(10), 科目 nvarchar(10), 成绩 int)
    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 学号
      

  3.   

    --result学号         科目         2001年       2002年       2003年       
    ---------- ---------- ----------- ----------- ----------- 
    A001       数学         82          0           85
    A001       语文         80          0           0
    A002       语文         84          0           0
    A003       英语         0           80          0
    A004       语文         0           0           86(所影响的行数为 5 行)