@jobo ist das eine Möglichkeit aus der Kiste "So geht's auch"? scheint mir ein bißchen Umständlich liefert aber das richtige Ergebnis.
Ja, wie Du festgestellt hast, es geht auch.
Der Grundgedanke ist: Wenn ich sowie alle "Abteilungen" oder was auch immer anzeigen muss(!), hab ich an der Stelle eh einen Fullscan (oder sowas in der Art, falls "alle Abteilungen" ein Zwischenergebnis aus einem View oder Subselect sind). Wenn das also stattfindet, kann ich die engine "unterwegs" an der Stelle direkt mitrechnen lassen, statt erneut diejenige Untermenge anzuflanschen und zu zählen, die mich am Ende interessiert.
So wird ein 2. Scan, Range/Hash was auch immer vermieden.
Ich hab mir nicht die Mühe gemacht, die Statements zu testen, aber auf die ein oder andere Art müssen auch die anderen Statements ihre Grundmenge irgendwo herbekommen und zwar unconditional und mglw auch ohne verfügbar Indizierung. Schau Dir den Ausführungsplan der Varianten an- falls es überhaupt eine Rolle spielt. Ich denke meine Variante dürfte da relativ übersichtlich sein.
Wenn Dein Originalstatement sehr komplex ist, sind die Unterschiede der Ausführungspläne ggF. schwer zu vergleichen, wenn dann noch die Datenmenge groß ist, bietet sich als erstes ein Blick auf die Laufzeit an. Das schnellste gewinnt.
Das Case When sieht natürlich nicht hübsch aus, die Lösung ist einfach straight forward. Die guten ins Töpfchen, die schlechten ..