有一个学生表,一个数学成绩表,一个语文成绩表,一个英语成绩表,有些学生只参加了一门考试,有些学生参加其中的两门考试,还有一些参加了全部考试,我想编写一个查询,查询所有学生的考试情况,不知如何写,谢谢您的帮助。
学生表字段:姓名,性别
语文表字段:姓名,成绩
数学表和英语表同语文表。期待:
姓名 语文 数学 英语
--------------------
张三 87 86
李四 95 25 74
王五 25
---------------------
学生表字段:姓名,性别
语文表字段:姓名,成绩
数学表和英语表同语文表。期待:
姓名 语文 数学 英语
--------------------
张三 87 86
李四 95 25 74
王五 25
---------------------
from 学生表
left join 语文表 on 学生表.姓名=语文表.姓名
left join 数学表 on 学生表.姓名=数学表.姓名
left join 英语表 on 学生表.姓名=英语表.姓名
--------------------
张三 X V V
李四 V V V
王五 V X X
---------------------
其中X表示未参加该项目考试,V恰好相反,表名已参加该项目考试
t1.成绩 语文
t2.成绩 数学
t3.成绩 英语
from 学生表 t
left join 语文表 t1 on t.姓名 = t1.姓名
left join 数学表 t2 on t.姓名 = t2.姓名
left join 英语表 t3 on t.姓名 = t3.姓名
select t.姓名,
case when t1.成绩 is null then 'X' else 'V' end 语文,
case when t2.成绩 is null then 'X' else 'V' end 数学,
case when t3.成绩 is null then 'X' else 'V' end 英语
from 学生表 t
left join 语文表 t1 on t.姓名 = t1.姓名
left join 数学表 t2 on t.姓名 = t2.姓名
left join 英语表 t3 on t.姓名 = t3.姓名
case when t1.成绩 is null then 'X' else 'V' end 语文, --上面那个“,”看起来是中文状态的,改了下
case when t2.成绩 is null then 'X' else 'V' end 数学,
case when t3.成绩 is null then 'X' else 'V' end 英语
from 学生表 t
left join 语文表 t1 on t.姓名 = t1.姓名
left join 数学表 t2 on t.姓名 = t2.姓名
left join 英语表 t3 on t.姓名 = t3.姓名
isnull(t1.成绩,'V') 语文 ,
isnull(t2.成绩,'V') 数学 ,
isnull(t3.成绩,'V') 英语
from 学生表 t
left join 语文表 t1 on t.姓名 = t1.姓名
left join 数学表 t2 on t.姓名 = t2.姓名
left join 英语表 t3 on t.姓名 = t3.姓名
brow
brow
1 JOIN是FROM子句。因多个JOIN在access中不能连用,查了一下"HELP"才知道的。
2 多个JOIN使用括号,如 FROM (((学生表 JOIN 语文 ON ...) JOIN 数学 ON ...)...)