求助一条SQL语句
有两个表:学生档案表 和 学生成绩表
学生成绩表 有四列:cjid(自动编号),c_sid(学号),c_km(科目名称),c_cj(成绩)。
其中科目值范围为:“数学/语文/英语”,
现在想检索出类似下面结构的结果:
学号 | 数学成绩 | 语文成绩 | 英语成绩
我先写出的语句是:
select b.学号,b.成绩 ywcj,c.成绩 sxcj,d.成绩 yycj
from 学生成绩表 b, 学生成绩表 c, 学生成绩表 d
where (b.c_sid =c.c_sid and c.c_sid=d.c_sid) and b.科目='语文' and c.科目='数学' and d.科目='英语'
但得不到我想要的结果
如果缺少某一科目的成绩记录时,检索结果不显示该同学的成绩,我想要的结果是,有记录则显示成绩,没有则显示无成绩。
SQL code:
换成left join
select
b.学号,b.成绩 ywcj,c.成绩 sxcj,d.成绩 yycj
from
学生成绩表 b
left join 学生成绩表 c on
b.c_sid =c.c_sid
left join 学生成绩表 d on
c.c_sid=d.c_sid
and
b.科目='语文'
and
c.科目='数学' and d.科目='英语'
SQL code:
select
b.学号,innull(b.成绩,'无成绩') as ywcj,innull(c.成绩,'无成绩') as sxcj,innull(d.成绩,'无成绩') as yycj
from
学生成绩表 b
left join 学生成绩表 c on
b.c_sid =c.c_sid
left join 学生成绩表 d on
c.c_sid=d.c_sid
and
b.科目='语文'
and
c.科目='数学'
相关问答:
场景如下:
客户把备份好的数据库,发给我,我在本机还原后,运行写好的存储过程,比较快,并且在实施那边运行同样比较快。但是当实施在客户那边运行的时候速度就非常的慢,时间超出了程序的时间限制。远程在客户那 ......
CREATE PROCEDURE [selectvipcompany]
@username varchar(50),
@companyname varchar(50),
@endtime varchar(1)
AS
declare @sql varchar(1000)
set @sql=''
if (@username<>null and @username ......
CREATE PROCEDURE [selectvipcompany]
@username varchar(50),
@companyname varchar(50),
@endtime varchar(1)
AS
declare @sql varchar(1000)
set @sql='' ......
可能因为工作的原因 接触数据库这块比较少,之前都是做程序这块,数据库这块都有专门的人来做 分工都很明细 所以对数据库这一块完全不了解。前段时间 去面试了几家公司 几乎都是在数据库这块挂掉的 连个简单的SQ ......