2012-04-21 149 views
2

我在MS Access數據庫中有5個表:tblMember,tblPoint,tblRace,tblRaceType和tblResult。 (所有這些都有主鍵。) tblPoint包含(RaceTypeID,位置,點)字段。JOIN,SUM和GROUP BY的SQL SELECT查詢

我想要做的就是查看成員參與的所有比賽,看看他們來自哪個位置(存儲在tblResult中)並查看這些職位是否得分(如tblPoint中定義的)。然後我想爲每個成員添加所有點並顯示這些,以及我的查詢中的成員名稱...

這可能嗎?我想出了下面這段SQL查詢我最好的拍攝:

SELECT Sum(tblPoint.Points) AS SumOfPoints, Count(tblRace.RaceID) AS CountOfRaceID,  
tblMember.MemberName, tblPoint.Points 
FROM ((tblRaceType INNER JOIN tblPoint ON tblRaceType.RaceTypeID = tblPoint.RaceTypeID)  
INNER JOIN tblRace ON tblRaceType.RaceTypeID = tblRace.RaceTypeID) INNER JOIN 
(tblMember INNER JOIN tblResult ON tblMember.MemberID = tblResult.MemberID) ON  
tblRace.RaceID = tblResult.RaceID 
GROUP BY tblMember.MemberName, tblPoint.Points 
ORDER BY tblPoint.Points DESC; 

有沒有人能夠指出我在正確的方向呢?

+0

我認爲你正在試圖用sql實現太多的方式......至少我可以說你迄今爲止已經完成了你的查詢......但是這裏的問題是你試圖產生一個結果集對我來說這看起來是不可能的...對我來說,這個問題必須在你的應用程序的業務邏輯中解決......你可以在其中構建具有多個查詢結果的期望格式...... – NiK 2012-04-21 16:56:23

+0

道歉,它不令人滿意,因爲在對於進入1場比賽並在同一場比賽中排名第一的人來說,它會多次返回相同的成員名稱,每次都會爲第一,第二,第三等分配點數。 我確實在想我是否也在嘗試做許多! – LNB 2012-04-21 17:04:37

+0

@LNB:這實際上很可能在沒有任何特殊技巧的情況下以純SQL執行此操作。你實際上與你的解決方案非常接近,問題在於你是按點分組的(請參閱我的答案)。此外,結果和積分之間沒有關聯,這就是爲什麼你爲每個展示位置獲得所有積分。 – Martin 2012-04-21 17:10:27

回答

3

我會說這

GROUP BY tblMember.MemberName, tblPoint.Points 
ORDER BY tblPoint.Points DESC; 

或許應該更多這樣的:

GROUP BY tblMember.MemberName 
ORDER BY Sum(tblPoint.Points) DESC; 

而且,在你選擇的最後刪除tblPoint.Points。這只是一個單一的值,你想要的總和。

按點分組意味着您將獲得每個成員的一行和他們得分的點值 - 可能不是您想要的。

+0

非常感謝您的幫助!它完美的工作得益於你的出色指導。 :) – LNB 2012-04-21 18:50:49