现有 学生表t_student,包含字段:sid, name, sex , birthday
        成绩表t_score,包含字段:sid, subject, score
求 : 有一部分学生有语文成绩,有一部分学生有英语成绩。查询学生们的语文成绩,没有语文成绩的则显示英语成绩,语文和英语成绩都没有的成绩栏显示0。尽可能用一句sql语句来实现。

解决方案 »

  1.   

    create table t_student(sid int,name nvarchar(10),sex nvarchar(2),birthday datetime)
    insert into t_student select 1,N'张三',N'南','1980-01-01'
                union all select 2,N'李四',N'男','1980-01-01'
                union all select 3,N'王五',N'女','1980-01-01'
    create table t_score(sid int,subject nvarchar(10),score int)
    insert into t_score select 1,N'语文',80
              union all select 1,N'数学',85
              union all select 2,N'数学',90
    select a.name,max(isnull(b.score,0)) as 语文,max(isnull(c.score,0)) as 数学 from t_student a
    left outer join t_score b on b.sid=a.sid and b.subject=N'语文'
    left outer join t_score c on c.sid=a.sid and c.subject=N'数学'
    group by a.namedrop table t_student,t_score
    ------------------------------------
    李四 0 90
    王五 0 0
    张三 80 85
      

  2.   

    create table t_student(sid int,name nvarchar(10),sex nvarchar(2),birthday datetime)
    insert into t_student select 1,N'张三',N'南','1980-01-01'
                union all select 2,N'李四',N'男','1980-01-01'
                union all select 3,N'王五',N'女','1980-01-01'
    create table t_score(sid int,subject nvarchar(10),score int)
    insert into t_score select 1,N'语文',80
              union all select 1,N'英语,85
              union all select 2,N'英语',90
    select a.name, 
    (case when b.subject is not null then b.score
    when b.subject is null and c.subject is not null then c.score
    else 0
    end) as score
    from t_student a 
    left outer join t_score b on a.sid = b.sid and b.subject = N'语文'
    left outer join t_score c on a.sid = c.sid and c.subject = N'英语'
    goname       score       
    ---------- ----------- 
    张三         80
    李四         90
    王五         0