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