Re: [SQL ] 合併資料表
僅供參考, 再根據需要增修.
列出每一個學生及其各科的分數
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
推
08/20 23:29, , 1F
08/20 23:29, 1F
→
08/21 06:53, , 2F
08/21 06:53, 2F
→
08/21 08:55, , 3F
08/21 08:55, 3F
推
08/21 13:22, , 4F
08/21 13:22, 4F
討論串 (同標題文章)