af0815 hat geschrieben: Mo 16. Mär 2026, 15:48
Nein, es wird in der Version von Zvoni ein zusätzliches Feld hinzugefügt (sieht man durch den blöden Stern im select ja direkt nicht, das hier ein Feld CNT mehr ist) das die Anzahl beinhaltet. Für das ist der Subselect mit dem Inner Join zuständig. Das man die Tabelle quasi mit sich selbst Joined ist öfters ein Trick um zusätzliche Informationen zu erzeugen.
Wird auch gerne für Rangfolgen oder Differenzen verwendet.
Korrekt.
Der Trick bei meiner Abfrage oben ist, dass das innere SELECT genau einen Datensatz liefert (Den "Count").
Da ich beim INNER JOIN kein Verknüpfungsfeld angebe, sondern ein stumpfes "ON 1=1", welches IMMER wahr ist, wird dieser eine Satz, an JEDEN Satz aus dem ersten SELECT hinten drangehängt.
Um es mal so auszudrücken:
38.257 individuelle Menschen sind beim Fussballspiel, und jeder einzelne von denen weiss, dass eben 38.257 Menschen beim Spiel sind.
Egal wen du frägst, er weiss die Antwort
Um es auf dein Beispiel zu übertragen
Code: Alles auswählen
SELECT P.ID, P.Nummer, P.Nachname, P.Vorname, P.Strasse, P.PLZ, P.Wohnort, A.Cnt
FROM Tab_Patienten As P
INNER JOIN
(SELECT COUNT(ID) As Cnt FROM Tab_Patienten) AS A
ON 1=1
ORDER BY P.Nummer
Jetzt ist es egal, ob du PacketRecords=50 hast, ob du im ersten SELECT ein FIRST xx SKIP yy machst:
Die letzte Spalte liefert dir immer die gesamte Anzahl.
Du kannst sogar Parameter nutzen
Code: Alles auswählen
SELECT P.ID, P.Nummer, P.Nachname, P.Vorname, P.Strasse, P.PLZ, P.Wohnort, A.Cnt
FROM Tab_Patienten As P
INNER JOIN
(SELECT COUNT(ID) As Cnt FROM Tab_Patienten WHERE Wohnort=:Ort) AS A -- GLEICHER PARAMETER-NAME!!
ON 1=1
WHERE Wohnort=:Ort -- GLEICHER PARAMETER-NAME!!
ORDER BY P.Nummer
Und der ParamByName('Ort').AsString:='Hamburg'; muss nur einmal im Code gesetzt werden.....