非常复杂的的存储过程,高手们来研究这样能写么?
JW_CL 班级信息
JW_CLname JW_CLcolcode
中文1班 2001
中文2班 2002
英语1班 2003
英语2班 2004
……
JW_SUB 科目信息表
JW_SUBname JW_SUBcode
高等数学 5001
大学英语 5002
大学体育 5003
……
JW_TH 教师信息表
JW_THname JW_THcode JW_SUBcode JW_CLcolcode
张老师 8001 5001 2001
李老师 8002 5002 2001
……
JW_ST 学生信息表
JW_STname JW_STnum JW_CLcolcode
张三 2007001001 2001
李四 2007001002 2001
王五 2007001002 2002
……
需要用这几个表向一个表里联合写入数据
JS_CJ 下发成绩表
JW_RESstnum JW_RESstname JW_REScj JW_RESsubcode JW_RESclcode JW_RESthcode
2007001001 张三 0(成绩默认) 5001 2001 8001
2007001002 李四 0 5001 2001 8001
2007001002 李四 0 5002 2001 8002
2007001001 张三 0 5002 2001 8002
……
其实就是用四个表往一个表里写数据
比如:
生成中文一班(2001),张老师(8001),科目为高等数学(5001)所有学生的数据表,发到下面给系里的秘书填了上报.
不知道我叙述清楚了没有...有高手会写这样的存储过程么
把代号的部分都用变量来表示.
[解决办法]
--创建测试环境
create table #JW_CL(JW_CLname varchar(20),JW_CLcolcode varchar(20))
insert #JW_CL(JW_CLname,JW_CLcolcode)
select '中文1班 ', '2001 ' union all
select '中文2班 ', '2002 ' union all
select '英语1班 ', '2003 ' union all
select '英语2班 ', '2004 '
create table #JW_SUB(JW_SUBname varchar(20),JW_SUBcode varchar(20))
insert #JW_SUB(JW_SUBname,JW_SUBcode)
select '高等数学 ', '5001 ' union all
select '大学英语 ', '5002 ' union all
select '大学体育 ', '5003 '
create table #JW_TH(JW_THname varchar(20),JW_THcode varchar(20),JW_SUBcode varchar(20),JW_CLcolcode varchar(20))
insert #JW_TH(JW_THname,JW_THcode,JW_SUBcode,JW_CLcolcode)
select '张老师 ', '8001 ', '5001 ', '2001 ' union all
select '李老师 ', '8002 ', '5002 ', '2001 '
create table #JW_ST(JW_STname varchar(20),JW_STnum varchar(20),JW_CLcolcode varchar(20))
insert #JW_ST(JW_STname,JW_STnum,JW_CLcolcode)
select '张三 ', '2007001001 ', '2001 ' union all
select '李四 ', '2007001002 ', '2001 ' union all
select '王五 ', '2007001002 ', '2002 '
--求解过程
select _st.JW_STnum,_st.JW_STname,0 as point,_su.JW_SUBname,_cl.JW_CLname,_th.JW_THname
from #JW_ST _st
join #JW_TH _th on _th.JW_CLcolcode = _st.JW_CLcolcode
join #JW_CL _cl on _cl.JW_CLcolcode = _th.JW_CLcolcode
join #JW_SUB _su on _su.JW_SUBcode = _th.JW_SUBcode
--删除测试环境
drop table #JW_CL,#JW_SUB,#JW_TH,#JW_ST
/*--测试结果
JW_STnum JW_STname point JW_SUBname JW_CLname JW_THname
-------------------- -------------------- ----------- -------------------- -------------------- --------------------
2007001002 李四 0 大学英语 中文1班 李老师
2007001001 张三 0 高等数学 中文1班 张老师
2007001002 李四 0 高等数学 中文1班 张老师
2007001001 张三 0 大学英语 中文1班 李老师
(所影响的行数为 4 行)
*/
[解决办法]
CN2074() ( ) 信誉:100 Blog 2007-03-01 08:41:37 得分: 0
我要的是向JS_CJ 表里写入数据..不是这个意思
-----------
那就這麼寫
Insert JS_CJ
Select
A.JW_STnum,
A.JW_STname,
0 As JW_REScj,
D.JW_SUBcode,
C.JW_CLcolcode,
B.JW_THcode
From JW_ST A
Inner Join JW_TH B on B.JW_CLcolcode = A.JW_CLcolcode
Inner Join JW_CL C on C.JW_CLcolcode = B.JW_CLcolcode
Inner Join JW_SUB D on D.JW_SUBcode = B.JW_SUBcode