目前在开发一个考试成绩系统。
现有3个表
表A tb_kaoshi 考试项目表
id name
ks1 期末考试
表B tb_kemu 考试科目表(不同年级的考试项目,科目可能不同。比如小学和初中)
id kaoshiid name
km1 ks1 语文
km2 ks1 数学
km3 ks1 英语
表C tb_fenshu 分数表
id kaoshiid kemuid empid name score
GUID ks1 km1 学生表外键ID 张三 90
GUID ks1 km1 学生表外键ID 李四 120
…
GUID ks1 km2 学生表外键ID 张三 100
GUID ks1 km2 学生表外键ID 李四 89
…
GUID ks1 km3 学生表外键ID 张三 107
GUID ks1 km3 学生表外键ID 李四 110
…
现在需要根据这3张表的数据,用SQL语句直接或间接的查询出如下DATATABLE表
姓名 语文 数学 英语
张三 90 100 107
李四 120 89 110
…
表示层用的是asp.net,我是打算用一个GRIDVIEW来显示这个生成的这个动态表。
如果上述表无法实现这个功能,那么该如何修改表结构?
表结构和功能基本就是这样了,感谢各位前辈莅临指导了,谢谢。
------解决方案--------------------
select name 姓名,
max(decode(kemuid, 'km1', score, 0)) 语文,
max(decode(kemuid, 'km2', score, 0)) 数学,
max(decode(kemuid, 'km3', score, 0)) 英语
from tb_fenshu
group by name
------解决方案--------------------
SELECT T.name '姓名', T1.score '语文', T2.score '数学', T3.score '英语' FROM
(SELECT T1.empid,T1.score FROM tb_fenshu WHERE kemuid='km1') T1,
(SELECT T2.empid,T2.score FROM tb_fenshu WHERE kemuid='km2') T2,
(SELECT T3.empid,T3.score FROM tb_fenshu WHERE kemuid='km3') T3,
SELECT T.name,T.empid FROM 学生表 T
WHERE T.empid=T1.empid
AND T.empid=T2.empid
AND T.empid=T3.empid