Hallo Gemeinde,
ich hätte eine Problemstellung wozu ich Eure Hilfe benötige (falls das überhaupt so lösbar ist wie ich mir das vorstelle).
Ausgangssituation:
Jede Person muss 3 Aufgaben absolvieren und zu jeder Aufgabe werden Punkte vergeben.
Die Tabelle sieht folgend aus:
persID | f_aufgabeid | status_aufgabe
1 | 1 | 3
1 | 2 | 5
1 | 3 | 2
f_aufgabenid ist die Aufgabennummer 1-3
status_aufgabe ist die Punkteanzahl
Was will ich errreichen
Eine Art Pivot-Darstellung
persID | Aufgabe 1 | Aufgabe 2 | Aufgabe 3
1 | 3 | 5 | 2
Mein Versuch dies abzubilden ist folgender (und das ist anscheinend der falsche Weg)
PHP-Code:
SELECT persid, vorname, nachname, jahr, f_aufgabenid, status_aufgabe,
(CASE WHEN f_aufgabenid = 1 THEN status_aufgabe END) AS Aufgabe_1,
(CASE WHEN f_aufgabenid = 2 THEN status_aufgabe END) AS Aufgabe_2,
(CASE WHEN f_aufgabenid = 3 THEN status_aufgabe END) AS Aufgabe_3,
FROM `aufgaben_person`
WHERE jahr = '2016'
Als Ausgabe bekomme ich folgende Struktur.
persid | vorname | nachname | jahr | f_aufgabenid | status_aufgabe | Aufgabe_1 | Aufgabe_2 | Aufgabe_3
1 | Max | Muster | 2016| 1 | 3 | 3 | NULL | NULL
1 | Max | Muster | 2016| 2 | 5 | NULL | 5 | NULL
1 | Max | Muster | 2016| 3 | 2 | NULL | NULL | 2
Auch ein SUM(CASE ... oder COUNT(CASE ... bringt nichts oder eines der Felder mit GROUP BY zu gruppieren hilft nichts.
Frage: Wie könnte eine mögliche SQL-Abfrage aussehen um das gewünschte Ergebnis zu erzielen (falls es möglich ist)?
Besten Dank im Voraus und hoffe die Aufgabenstellung ist nachvollziehbar für Euch.
lg
Dietmar