2009-05-14 16 views
2

私は、Reps、Teams、Errors、Error Logを含む一連のテーブルを持っています。 エラーログには、担当者が行ったすべてのエラーが一覧表示されます。各担当者はチームに所属しています。各担当者にはエッジID(ユーザー番号) があります。エラーの種類ごとにポイント値(エラーテーブルに格納されています)があります。ACCESS SQL> SELECT CASE HELP

私は2つの日付の間、チーム内の各担当者のためのポイント値を合計するAccessでこのクエリを持っている:

SELECT 
    Reps.Forename 
    , Reps.Surname 
    , [Error Log].[Edge ID] 
    , Teams.[Team Code] 
    , Sum(Errors.Points) AS SumOfPoints 
FROM Teams 
    INNER JOIN (
     Reps INNER JOIN (
      Errors INNER JOIN [Error Log] 
       ON Errors.[E&CD code] = [Error Log].[E&CD Code]) 
      ON Reps.[Edge ID] = [Error Log].[Edge ID]) 
     ON Teams.[Team Code] = Reps.[Team Code] 
WHERE 
    ((([Error Log].[Date Logged]) Between [Error logged from: (dd/mm/yyyy)] And [Error logged to: (dd/mm/yyyy)]) 
AND 
    ((Teams.[Team Code])=[Team Code:])) 
GROUP BY 
    Reps.Forename 
    , Reps.Surname 
    , [Error Log].[Edge ID] 
    , Teams.[Team Code] 
ORDER BY 
    Sum(Errors.Points) DESC; 

私は、各担当者にポイントの彼らの数に依存グレード、与えたい: を0-4ポイント=グレード3,5-9 = 4,10+ = 5

これをどのようにコードすることができますか(SELECT CASEおそらく)?私は最後の1時間を試みてきましたが、それを正しく得ることはできません!

ありがとうございました。

答えて

2

私はあなたがアクセスを選択する場合の構造をサポートしていません

SELECT 
    Reps.Forename 
    ... 
    , Sum(Errors.Points) AS SumOfPoints 
    , IIf(Sum(Errors.Points) > 5, "Super Star", "Dummy") 
    ... and so on ... 
4

を試みることができる

...あなたは同じものを取得するために、MS AccessのSQLでIIF()ステートメントインラインを使用することができると思います。代わりに、あなたはあなただけのテーブルではなく、コードを維持するように、成績のためにテーブルを作成することもできますSwitch機能に

Switch(SumOfPoints >= 10, 5, SumOfPoints >=5, 4, ...) 
+0

+1私のIIFソリューションよりずっときれいです。彼が何を望んでいるかの入れ子にされた条件は、再読にはかなり恐ろしいでしょう –

+0

+1毎日何か新しいことを学ぶ! – Andomar

+0

なぜ、なぜ、あなたはこれをコールしていないのですか?MS!どのくらいの時間が私の助けでこの機能を探して過ごしましたか... – mavnn

1

を使用する必要があります。あなたのスコアにそれに参加してください。

スコア|グレード 0、3 1、3 ... 10、5

テーブルでない場合は、= 5

また、StartScore、EndScoreとグレードを持つことができます。開始点と終了点の間のどのスコアでも成績が得られます。