Angabe „GROUP BY Roster_Code, Abteilung“ im Grunde bedeutet, dass Sie für jede unterschiedliche Kombination eine Zeile in der Ausgabe zu sehen erwarten von Roster_Code und Department, die in der Tabelle vorhanden sind.
Zum Beispiel würde die Ausgabe eine Zeile für Roster_Code = A, Abteilung = HRS enthalten. Aber es gibt einige Zeilen in dieser Gruppe mit STATUS = IN und andere mit STATUS = ABSENT. Daher ist nicht klar, was Sie in dieser Situation in der Ausgabe erwarten. Daher wird eine Fehlermeldung angezeigt.
Aus diesem Grund können Sie nicht einfach 'STATUS' auswählen - entweder müssen Sie es in die GROUP BY-Klausel aufnehmen (damit Sie für jeden STATUS unterschiedliche Zeilen in der Ausgabe haben) oder eine Aggregatfunktion verwenden, die SQL Server mitteilt wie man die mehreren Werte zu einem einzigen Wert kombiniert, den sie ausgeben kann.
Es sieht so aus, als ob Sie tatsächlich versuchen, zu Count die Anzahl der Mitarbeiter mit 'IN' Status und die Gesamtzahl der Mitarbeiter. Dies bedeutet wahrscheinlich, dass Sie die COUNT() - Aggregatfunktion verwenden möchten.
ist hier ein Schritt in Richtung Ausgang Sie wollen:
SELECT Department,
Roster_Code,
COUNT(CASE WHEN STATUS='IN' THEN 1 ELSE NULL END) IN_STATUSES,
COUNT(*) TOTAL_STATUSES
FROM #TEM1 GROUP BY Department, Roster_Code
Es sieht aus wie Sie auch alle Roster anderer Code als A/B/D/E als ‚Andere‘ klassifizieren wollen, so können wir hinzufügen ein weiterer Schritt, das zu tun:
SELECT Department,
Roster_Code,
COUNT(CASE WHEN STATUS='IN' THEN 1 ELSE NULL END) IN_STATUSES,
COUNT(*) TOTAL_STATUSES
FROM
(
SELECT Department,
CASE WHEN Roster_Code IN ('A','B','D','E') THEN Roster_Code ELSE 'Other' END Roster_Code,
STATUS
FROM #TEM1
) x
GROUP BY Department, Roster_Code
Es sieht aus wie Sie auch eine „Pivot“ Operation ausgeführt werden soll, die die einzelnen Reihen nehmen wir derzeit für A/B/D/E/Andere haben und wandeln diese in ihre eigenen Spalten in einer einzigen Zeile. Dann werden Sie die Status-Zählungen, die wir gegenwärtig haben, in Zeichenfolgen der Form "3/4" kombinieren wollen - dies ist nur ein Fall der Verkettung (z. B. IN_STATUSES + '/' + TOTAL_STATUSES).
Sie sollten PIVOT verwenden, denke ich. –
Der Fehler ist genau das, was in der Fehlermeldung ist. Stoppen Sie die Auswahl von 'STATUS'. – Terminus
aber der Status ist wichtig, um abwesend oder anwesend zu zählen – KyLim