Re: [SQL ] 合併資料表

看板Database作者 (寶貝豬)時間16年前 (2009/08/20 18:32), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/4 (看更多)
僅供參考, 再根據需要增修. 列出每一個學生及其各科的分數 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
請問一下 MYsql 也可以用這語法嗎
08/20 23:29, 1F

08/21 06:53, , 2F
應該可以用
08/21 06:53, 2F

08/21 08:55, , 3F
我就是用mysql的.
08/21 08:55, 3F

08/21 13:22, , 4F
嗯嗯 謝謝 我試試看
08/21 13:22, 4F
文章代碼(AID): #1AZIOnC_ (Database)
文章代碼(AID): #1AZIOnC_ (Database)