Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi In SELECT eine "Zählspalte" hinzufügen (https://www.delphipraxis.net/99138-select-eine-zaehlspalte-hinzufuegen.html)

PeterRettig 7. Sep 2007 10:52

Datenbank: Firebird • Version: 2.0 • Zugriff über: Zeos

In SELECT eine "Zählspalte" hinzufügen
 
Hallo,

ich möchte bei einer bestehenden SQL-Abfrage eine zusätzliche "virtuelle Spalte" zurückbekommen,
die einfach einen Zählwert von 1 aufwärts enthält.
Ich habe also beispielsweise eine Tabelle mit Vorname und Name.
Hans / Meier
Hans / Müller
Klaus / Meier

Wenn ich jetzt eine Abfrage mit einer beliebigen Where-Klausel stelle
soll als Ergebnis

1 Hans Meier
2 Klaus Meier

herauskommen (wenn ich z.B. nach Nachname = 'Meier' gefragt hätte.

Vielen Dank im Voraus...

Peter

mkinzler 7. Sep 2007 11:38

Re: In SELECT eine "Zählspalte" hinzufügen
 
Ein join auf ein Count-Statement oder einem subselect.

PeterRettig 7. Sep 2007 12:05

Re: In SELECT eine "Zählspalte" hinzufügen
 
Ich verstehe nicht ganz wie das funktionieren soll.

Ausgehend von der Anweisung:
SQL-Code:
SELECT vorname, nachname FROM ADRESSEN WHERE nachname='Meier'
müsste ich diese dann abändern nach irgendetwas in der Art?
(Was so natürlich nicht das gewünschte Ergebnis hervorbringt.)

SQL-Code:
SELECT vorname, nachname FROM adressen
(SELECT count(vorname) AS nummer FROM adressen)
WHERE nachname='Meier'
Leider habe ich nicht die zündende Idee, wie ich hier einen
Zähler zustande bringen sollte.

Gruß, Peter.

mkinzler 7. Sep 2007 12:10

Re: In SELECT eine "Zählspalte" hinzufügen
 
SQL-Code:
SELECT
    vorname, nachname,
   (SELECT count(vorname) FROM adressen WHERE nachname='Meier') AS nummer
FROM
    adressen
WHERE
    nachname='Meier';
oder besser

SQL-Code:
SELECT
    vorname, nachname,
   (SELECT count(vorname) FROM adressen GROUP BY Nachname where nachame = a.nachname;) AS nummer
FROM
    adressen a
WHERE
    nachname='Meier'

PeterRettig 7. Sep 2007 12:30

Re: In SELECT eine "Zählspalte" hinzufügen
 
Ich glaube ich habe mich da nicht deutlich genug ausgedrückt.
Die Zählvariable soll eine Art laufende Nummer fungieren.
Mit der genannten SQL.Anweisung erhalte ich ja nur die
Anzahl der Einzelsätze und das würde in dieser einfachen Form
stets eine 1 ausgeben!

vsti 7. Sep 2007 13:42

Re: In SELECT eine "Zählspalte" hinzufügen
 
Die Problematik hatte ich auch schonmal. Leider ist Firebird da nicht so weit wie andere Datenbanksysteme. z.B. Oracle hat IMHO die Funktion ROWNUM die man einfach als Spalte aufrufen kann. Bei Firebird muss sowas erst über eine eigene UDF eingebracht werden.

Hab am Ende einfach wärend der Ausgabe die Zeilen manuell hochgezählt. Zugegeben nicht so schön wie über SQL, aber vielleicht hat jemand ja noch ne bessere Lösung parat... Würde mich auch interessieren... :firejump:

marabu 7. Sep 2007 15:50

Re: In SELECT eine "Zählspalte" hinzufügen
 
Hallo Leute,

vielleicht interessiert euch dieser Thread: zusaetzliche spalte im dbgrid durchnummerieren

Grüße vom marabu

Hansa 7. Sep 2007 16:51

Re: In SELECT eine "Zählspalte" hinzufügen
 
1. Vorschlag : SP
2. Vorschlag : SELECT COUNT (*) FROM TABLE??
3. Vorschlag : Datenmenge ermitteln und im Programm durchzählen


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz