当前位置: 代码迷 >> Oracle开发 >> 请问一个多表连接得SQL语句
  详细解决方案

请问一个多表连接得SQL语句

热度:40   发布时间:2016-04-24 06:44:11.0
请教一个多表连接得SQL语句
目前在开发一个考试成绩系统。
现有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
 
  相关解决方案