2012-04-21 23 views
2

私はMS Accessデータベースに5つのテーブルを持っています:tblMember、tblPoint、tblRace、tblRaceTypeおよびtblResult。 (すべてに主キーがあります) tblPointに(RaceTypeID、Position、Points)フィールドが含まれています。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であまりにも多くの方法を達成しようとしていると思う... Atleast私はあなたが今までのあなたの質問をうまくやったと言うことができます...しかし、ここでの問題は結果セットこれは私には不可能なように見える...私にはこの問題/問題は、アプリケーションのビジネスロジックで扱われなければならない...複数のクエリ結果で所望のフォーマットを構築できるところ... – NiK

+0

謝罪、それは満足できるものではない1レースに入って、同じレースで最初に来た人のための瞬間、同じmemberNameを複数回返します。毎回、第1、第2、第3などのポイントを割り当てます。 私はあまりにもやろうとした多く! – LNB

+0

@LNB:特別なトリッキーなことなしにプレーンSQLでこれを行うことは、実際には可能です。あなたは実際にあなたのソリューションに非常に近いですが、問題はあなたがポイント別にグループ化していることです(私の答えを見てください)。また、結果とポイントの間にはリンクがないため、すべてのプレースメントについてすべてのポイントが得られます。 – Martin

答えて

3

私はこの

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

はおそらくもっとこのようなことがなければならないと言うだろう:

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

また、あなたの選択の終わりにtblPoint.Pointsを削除します。これはちょうど単一点の値であり、合計が必要です。

ポイント別にグループ化すると、スコアリングしたメンバーとポイント値ごとに1行が表示されます。意図したとおりではない可能性があります。

+0

多くのご協力いただきありがとうございます!あなたの優れた指導のおかげで完璧に動作します。 :) – LNB