Ich habe folgenden TabellenCOUNT als 0 abrufen, wenn JOIN Wert
Geschlecht
+----+-------------+
| ID | Description |
+----+-------------+
| 1 | M |
| 2 | F |
+----+-------------+
Abteilung
+----+-------------------+
| ID | DepartmentName |
+----+-------------------+
| 1 | Application |
| 2 | Change Management |
| 3 | Infrastructure |
+----+-------------------+
Mitarbeiter
nicht zurück+----+----------+----------+-------------+--------------+
| ID | Name | GenderID | StaffNumber | DepartmentID |
+----+----------+----------+-------------+--------------+
| 1 | Stephen | 1 | SC001 | 1 |
| 2 | Jacob | 1 | SC002 | 1 |
| 3 | Maria | 2 | SC003 | 1 |
| 4 | Valerie | 2 | SC004 | 1 |
| 5 | Herman | 1 | SC005 | 3 |
| 6 | Trevor | 1 | SC006 | 3 |
| 7 | Mark | 1 | SC007 | 2 |
| 8 | Hendrick | 1 | SC008 | 2 |
+----+----------+----------+-------------+--------------+
Ich möchte herausfinden, die Gesamtzahl der Mitarbeiter nach Departement & Geschlecht gruppiert. Wenn für eine Abteilung kein Geschlecht existiert, möchte ich immer noch das Geschlecht mit 0 als Zählung angeben.
habe ich versucht, diese SQL, aber es abrufen nicht, was ich will:
SELECT
e.DepartmentID,
e.GenderID,
COUNT(e.ID) AS TotalEmp
FROM
Employee e
RIGHT OUTER JOIN Gender g
ON e.GenderID = g.ID
GROUP BY
e.DepartmentID,
e.GenderID
ORDER BY
e.DepartmentID,
e.GenderID
Aktuell Ergebnis
+--------------+----------+----------+
| DepartmentID | GenderID | TotalEmp |
+--------------+----------+----------+
| 1 | 1 | 2 |
| 1 | 2 | 2 |
| 2 | 1 | 2 |
| 3 | 1 | 2 |
+--------------+----------+----------+
Erwartetes Ergebnis
+--------------+----------+----------+
| DepartmentID | GenderID | TotalEmp |
+--------------+----------+----------+
| 1 | 1 | 2 |
| 1 | 2 | 2 |
| 2 | 1 | 2 |
| 2 | 2 | 0 |
| 3 | 1 | 2 |
| 3 | 2 | 0 |
+--------------+----------+----------+
können Sie bitte eine sqlfiddle erstellen? – Jens
Zuallererst: Sie sollten immer 'left join' verwenden. Auch wenn Sie mit 'e.GenderID' gruppiert sind, ändern Sie es in' g.GenderID'. –
Tipp von heute: vergessen Sie nicht richtig beizutreten. Verwenden Sie stattdessen "LINKE VERBINDUNG"! Gleiche Funktionalität, aber eine sinnvolle Tabellenreihenfolge. ("main table left join optionale Daten", anstatt "optionale Daten rechts Join Haupttabelle".) – jarlh