作者bobju (宝贝猪)
看板Database
标题Re: [SQL ] 合并资料表
时间Thu Aug 20 18:32:15 2009
仅供参考, 再根据需要增修.
列出每一个学生及其各科的分数
select student.*,
ifnull(test1.score,0) as score1,
ifnull(test2.score,0) as score2,
ifnull(test3.score,0) as score3
from student
left join test as test1 on ( student.sid=test1.sid and test1.tid='test1' )
left join test as test2 on ( student.sid=test2.sid and test2.tid='test2' )
left join test as test3 on ( student.sid=test3.sid and test3.tid='test3' )
////////////////////////////////////////
另外在你给的范例当中有用到sum 跟 group by , 这很难理解,
因为sum是加总, group by 是分群, 看不出列出各别学生各科的分数
有何需要用上sum 跟 group by?
※ 引述《bluehaerts (5858笨58)》之铭言:
: 现在 我有2个资料表
: 表格1 表格2
: A B
: sid(学号) name(姓名) | sid(学号) tid(考试类别) 分数(score)
: |
: 001 aaaa | 001 test1 50
: 002 bbbb | 001 test2 60
: 003 cccc | 001 test3 70
: 004 dddd | 002 test1 50
: | 002 test2 60
: | 002 test3 70
: | 003 test1 50
: | 003 test2 60
: | 003 test3 70
: | 004 test1 50
: | 004 test2 60
: | 004 test3 70
: 我想抓出资料的形式是表格3
: 表格3
: sid(学号) name(姓名) test1 test2 test3
: 001 aaaa 50 60 70
: 002 bbbb 50 60 70
: 003 cccc 50 60 70
: 004 dddd 50 60 70
: 这边 我上网找到了1个方法
: 以下是我是sql的语法
: SELECT sid,
: SUM(IF(tid= 'test1' ,score ,0 )) AS test1,
: SUM(IF(tid= 'test2' ,score ,0 )) AS test2,
: SUM(IF(tid= 'test3' ,score ,0 )) AS test3,
: FROM B
: GROUP BY sid
: sid(学号) test1 test2 test3
: 001 50 60 70
: 002 50 60 70
: 003 50 60 70
: 004 50 60 70
: 到这边已经 可以成功的把表格3 用出来一半
: 可是重点是 我没办法 把name 也抓进来
: 我有试过下面这方法
: SELECT A.name,B.sid
: SUM(IF(tid= 'test1' ,score ,0 )) AS test1,
: SUM(IF(tid= 'test2' ,score ,0 )) AS test2,
: SUM(IF(tid= 'test3' ,score ,0 )) AS test3
: FROM A,B
: where A.sid = B.sid
: GROUP BY A.sid
: 之後 我乱试 INNER JOIN 也不能用
: 我已经不知道 有啥方法了
: 还是我有哪边观念不对
: 可以请高手帮我提示一下吗
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.183.16
1F:推 bluehaerts:请问一下 MYsql 也可以用这语法吗 08/20 23:29
2F:→ joedenkidd:应该可以用 08/21 06:53
3F:→ bobju:我就是用mysql的. 08/21 08:55
4F:推 bluehaerts:嗯嗯 谢谢 我试试看 08/21 13:22