Hallo zusammen,
ich habe eine Frage bzgl. einer kniffligen SQL-Abfrage, welche über eine Art Bewertungsbogen laufen soll.
Zunächst eine Beschreibung des Szenarios. Ich gebe dabei jede Tabelle mit ihren relevanten Spalten an und kennzeichne Schlüssel durch ein #-Zeichen:
Ich habe mehrere Datensätze in einer Tabelle:
katalog: #idkatalog name
Ein Katalog besteht aus mehreren Kategorien, eine Kategorie kann eindeutig einem Katalog zugeordnet werden. Jede Kategorie hat eine numerische Gewichtung:
kategorie: #idkategorie #katalog_idkatalog gewichtung
Eine Kategorie besteht aus mehreren Parametern, ein Parameter kann eindeutig einer Kategorie zugeordnet werden. Jeder Parameter hat eine numerische Gewichtung und eine maximal zu erreichende Punktzahl:
parameter: #idparameter #kategorie_idkategorie gewichtung maximalpunkte
Um einen Objekt zu bewerten, existiert eine Tabelle, die jedem Objekt eine erreichte Punktzahl pro Parameter zuordnet:
objekt: #idobjekt #parameter_idparameter punkte
Ich will am Ende der SQL-Abfrage für ein gegebenes Objekt (!) einen numerischen Wert pro Katalog als Ergebnis haben, wie folgt:
- Pro Parameter werden die erreichten Punkte durch die Maximalpunkte des Parameters geteilt und mit der Gewichtung des Parameters multipliziert, das Ergebnis hier als Parameterbewertung bezeichnet.
- Pro Kategorie wird die Summe aller Parameterbewertungen durch die Summe aller Parametergewichtungen geteilt und mit der Gewichtung der Kategorie multipliziert, das Ergebnis hier als Kategoriebewertung bezeichnet.
- Pro Katalog wird die Summe aller Kategoriebewertungen durch die Summe aller Kategoriegewichtungen geteilt.
Meine SQL-Abfrage deckt 1) und 2) ab, aber bei der Ergänzung der Abfrage zu 3) stehe ich auf dem Schlauch, denn ich bekomme die Summe aus 3) nicht integriert:
SELECT katalog.name, SUM(objekt.punkte / parameter.maximalpunkte * parameter.gewichtung) / SUM(parameter.gewichtung) * kategorie.gewichtung
FROM objekt, parameter, kategorie, katalog
WHERE objekt.idobjekt = **OBJEKTID**
AND objekt.parameter_idparameter = parameter.idparameter
AND parameter.kategorie_idkategorie = kategorie.idkategorie
AND kategorie.katalog_idkatalog = katalog.idkatalog
GROUP BY kategorie.idkategorie
Diese Abfrage gibt mir nun für jede Kategorie Schritt 2) zurück. Wie komme ich zu Schritt 3)?
Ich weiß, es ist viel Text, wenn sich da einer durcharbeiten und mir helfen kann, bin ich sehr dankbar.
Viele Grüße
Volker