我有一个比较复杂的SQL语句查询问题请大家帮忙。(100分)

  • 主题发起人 主题发起人 sunwork
  • 开始时间 开始时间
S

sunwork

Unregistered / Unconfirmed
GUEST, unregistred user!
表一(学生资料表)
single
scode name grade class
10001 张三 高二 一班
10002 陈一 高二 一班

表二(系统设置)
syssetup 文理科
grade class fenke
高二 一班 1
高二 二班 2
文理科里面 1 表示 文科
2 表示 理科


表三(成绩表)
achieve
编号 项目 语文 数学 .... 总成绩
scode subject chinese maths masterscore
10001 测试 60 60 300
10002 测试 80 80 400



表四(统计表)
编号 总成绩 平均分 文理科
temp
scode total avagescore fenke
10001 300 60 1
10002 400 80 2

表一 表三以 scode为主键连接



我想要 把高二 全部学生的总成绩 读到统计表里面,
这样需要从 single表里面读 SCODE
从 achieve表里面读 总成绩
从 syssetup表里面读 文理科


查询条件是 班级 = 高 二,项目 = 测试,

我用一条语句可以把成绩表和学生资料表的读出来放到temp表里面,
但是怎么读syssetup表的内容,把每个学生属于文科或者理科的值正确地读到temp表里面。

insert into temp(scode,masterscore,avagescore,fenke)
select s.scode,a.total, a.total/4,
from a.achieve a inner join single s on a.scode = s.scode

请各位想想办法,不吝赐教。
 
试试这样
insert into temp(scode,masterscore,avagescore,fenke)
select s.scode,a.total, a.total/4,t1.fenke
from a.achieve a inner join single s on a.scode = s.scode
(select t2.scode,t3.fenke from single t2,syssetup t3
where t2.grade=t3.grade and t2.class=t3.class) t1
where a.scode=t1.scode
 
delete temp
insert into temp(scode,masterscore,avagescore,fenke)
select
s.scode,masterscore,masterscore /4 ,fenke
from
single s , syssetup sys , achieve a
where
s.scode = a.scode
and
s.grade = sys.grade
and
s.class = sys.class
 
insert into temp(scode,total,avagescore,fenke)
select a.scode,c.masterscore,c.masterscore/4,b.fenke
from single a,syssetup b,achieve c
where a.grade='高二' and
a.grade=b.grade and
a.scode=c.scode and
c.subject='测试';
 
netwind和yunsheng is correct,但不知道你為何用inner join,如果非要用的話.如下:
SELECT s.scode, a.masterscore, a.masterscore/4,sys.fenke
FROM achieve AS a INNER JOIN (single AS s INNER JOIN syssetup sys on s.class=sys.class) ON a.scode = s.scode


 

insert into temp
select s.scode,a.total, a.total/4,syssetup.fenke
from achieve a inner join single s on a.scode = s.scode inner join
syssetup on a.grade=syssetup.grade and a.class=syssetup.class


 
I found I came here later;
I agree with all of the above;
 
To sunwork:
这个问题不过是一个三表连结而已,和两表连结一样啊,关键是把握关系数据库“连接”
的本质。
btw: lazy_cat 的语法是 Access 格式,sunwork 可能更加习惯于 SQL Server 。
相比之下,SQL Server 的语法更加自由。
 
同意yanliang
 
多人接受答案了。
 
后退
顶部