Hallo zusammen, ich habe folgendes Problem: Ich habe 2 Tabellen die wie folgt aufgebaut sind: Tabelle 1: = Personal ID | Name | Vorname 1 Maier Fritz 2 Müller Hans 3 Huber Sebastian 4 Eder Helmut Tabelle 2: = Produkt Produkt | Personal.ID | Qualität 159 1 3 258 1 3 596 2 4 597 2 5 789 4 3 Jetzt möcht ich zählen, wie oft eine Person ein Produkt mit der Qualität 3 produziert hat. Dafür soll auch eine 0 ausgegeben werden wenn, kein Datensatz mit dieser Person vorhanden ist oder eine Person das Produkt nicht in der Qualtiät 3 fertigen kann. Als Ergebnis möchte ich also in diesem Fall das erhalten: Name | Vorname | Häufigkeit Maier Fritz 2 Müller Hans 0 -> Fertigt nicht in passender Qualität Huber Sebastian 0 -> kein Datensatz vorhanden Eder Helmut 1 Meine Abfrage sieht bisher so aus: SELECT Personal.Name, Personal.Vorname, COUNT(Produkt.PersonalID) FROM Personal LEFT OUTER JOIN Produkt ON Personal.ID = Produkt.PersonalID WHERE Produkt.Qualität = 3 OR Produkt.Qualität IS NULL GROUP BY Personal.Name, Personal.Vorname ORDER BY Personal.Name Somit werden zwar alle vorhandenen Datensätze richtig gezählt, Datesätze die nicht vorhanden sind werden auch mit 0 angezeigt, jedoch werden Datensätze wo die Qualität != 3 ist nicht mit der 0 ausgegeben sondern werden gar nicht berücksichtigt. Wie muss ich meine Abfrage ändern um das zu realisieren? Danke für eure Hilfe!
Wayne Interessierts schrieb: > > Somit werden zwar alle vorhandenen Datensätze richtig gezählt, Datesätze > die nicht vorhanden sind werden auch mit 0 angezeigt, jedoch werden > Datensätze wo die Qualität != 3 ist nicht mit der 0 ausgegeben sondern > werden gar nicht berücksichtigt. ist auch richtig, genau das verlangst du im query ja auch: > WHERE Produkt.Qualität = 3 OR Produkt.Qualität IS NULL
Aber ich komm leider nicht drauf, wie ich es ändern könnte, dass es zu meinene Anforderungen passt. Hast du eine Idee?
Wayne Interessierts schrieb: > Aber ich komm leider nicht drauf, wie ich es ändern könnte, dass es zu > meinene Anforderungen passt. Wenn Subquerys unterstützt werden könnte man das z.B. so machen:
1 | SELECT Personal.Name, Personal.Vorname, (SELECT count(*) From Produkt where Produkt.PersonalID= Personal.ID AND Produkt.Qualität = 3) as Anzahl |
2 | FROM Personal |
3 | GROUP BY Personal.Name, Personal.Vorname |
4 | ORDER BY Personal.Name |
sollte es nicht ohne das or gehen SELECT Personal.Name, Personal.Vorname, COUNT(Produkt.PersonalID) FROM Personal LEFT OUTER JOIN Produkt ON Personal.ID = Produkt.PersonalID WHERE Produkt.Qualität = 3 GROUP BY Personal.Name, Personal.Vorname ORDER BY Personal.Name
achne 2.Versuch SELECT Personal.Name, Personal.Vorname, COUNT(Produkt.PersonalID) FROM Personal LEFT OUTER JOIN Produkt ON Personal.ID = Produkt.PersonalID and Produkt.Qualität = 3 GROUP BY Personal.Name, Personal.Vorname ORDER BY Personal.Name
Hallo, habe gerade mal deinen Vorschlag probiert. Ich erhalte dabei eine Fehlermeldung, dass der Verknüfungsausdruck nicht unterstützt wird. Muss wohl an dieser Zeile leigen. Peter II schrieb: > LEFT OUTER JOIN Produkt > ON Personal.ID = Produkt.PersonalID > and Produkt.Qualität = 3 Weiterhin funktioniert diese Variante auch nicht: > SELECT Personal.Name, Personal.Vorname, (SELECT count(*) From Produkt > where Produkt.PersonalID= Personal.ID AND Produkt.Qualität = 3) as Anzahl > FROM Personal > GROUP BY Personal.Name, Personal.Vorname > ORDER BY Personal.Name In der SELECT count(*) fehlt ihm einige Verweise. Ändere ich das ganze so: (SELECT count(Produkt.PersonalID) FROM Produkt, Personal WHERE Produkt.PersonalID = Personal.ID AND Produkt.Qualität = 3 GROUP BY Produkt.PersonalID) Erhalte ich als Ergebnis die Anzahl aller Datensätze und das für jede Person. Langsam bin ich echt am verzweifeln. Hat jemand noch eine Idee?
Wayne Interessierts schrieb: >> LEFT OUTER JOIN Produkt >> ON Personal.ID = Produkt.PersonalID >> and Produkt.Qualität = 3 dass ist aber auf jeden Fall gültiges SQL. Das muss gehen, eine verknüpfung kann auch über mehre spalten erfolgen. Was ist es überhaupt für eine Datenbank?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.