2009-05-14 6 views
2

Ich habe eine Reihe von Tabellen einschließlich Reps, Teams, Fehler, Fehlerprotokoll. Fehlerprotokoll listet alle Fehler auf, die von einem Rep gemacht wurden. Jeder Vertreter ist in einem Team. Jeder Repräsentant hat eine Edge ID (Benutzernummer) Jeder unterschiedliche Fehlertyp hat einen Punktewert (in der Fehlertabelle gespeichert).ACCESS SQL> SELECT CASE HILFE

ich diese Abfrage in Access habe den Punktwert für jede Wiederholung in einem Team zwischen zwei Daten insgesamt:

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; 

Ich mag jeder Wiederholung eine Note geben, abhängig von ihrer Anzahl von Punkten, wobei gilt: 0-4 Punkte = Note 3, 5-9 = 4 und 10+ = 5

Wie kann ich das programmieren (SELECT CASE vielleicht)? Ich habe es in der letzten Stunde versucht, aber ich kann es nicht richtig machen!

Danke für jede Hilfe.

Antwort

2

Ich glaube, Sie die IIF() Anweisung inline in MS Access SQL die gleiche Sache zu bekommen verwenden können ...

Sie könnten versuchen,

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

Zugang nicht unterstützt wählen Gehäusestruktur. Stattdessen müssen Sie die Switch Funktion

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

+1 das ist viel hübscher als meine IIF-Lösung. genestete Bedingungen für das, was er will, wäre schrecklich wieder zu lesen –

+0

+1 Sie lernen jeden Tag etwas Neues! – Andomar

+0

Warum, oh warum, hast du das nicht Select, MS! Wieviele Stunden habe ich damit verbracht, in der Hilfe nach dieser Funktion zu suchen ... – mavnn

1

Sie wollen für die Klassen eine Tabelle erstellen können verwenden, so dass Sie nur die Tabelle halten und nicht den Code. Schließe dich deinen Punktzahlen an.

Ergebnis | Grade 0, 3 1, 3 ... 10, 5

Wenn nicht in der Tabelle dann = 5.

Auch könnte StartScore, EndScore und Grade haben. Jeder Punktestand zwischen Start und Ende würde die Note erhalten.