Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Datensätze gruppieren: Wie Feldwert nach Bedingung setzen? (https://www.delphipraxis.net/210819-datensaetze-gruppieren-wie-feldwert-nach-bedingung-setzen.html)

BlueStarHH 15. Jun 2022 10:49

Datenbank: Firebird • Version: 3.x • Zugriff über: IBDAC

Datensätze gruppieren: Wie Feldwert nach Bedingung setzen?
 
Hallo,

ich habe diese Tabelle:

Code:
Adressen
-----------------
ID      Integer
Aktiv   Bool
Firma   Varchar
Strasse Varchar
Ort     Varchar
...
Ich möchte nun alle mehrfach vorhandenen gleichen Adressen ermitteln. Dabei sollen gleiche Adressen zusammen gruppiert werden und mitsamt den mehrfach vorhandenen IDs ausgegeben werden. Das mache ich so:

Code:
select coalesce(Firma, '') as Firma, coalesce(Strasse, '') as Strasse, coalesce(Ort, ''), list(ID) as IDs, from Adressen
group by Firma, Strasse, Ort
having count(*) > 1
Das funktioniert. Nun möchte ich dazu aber zusätlzich das Feld "Aktiv" dazu ausgeben und zwar so:

Wenn alle Adressen einer Gruppe aktiv=true haben soll in der Spalte Aktiv true stehen.
Wenn alle Adressen einer Gruppe aktiv=false haben soll in der Spalte Aktiv false stehen.
Wenn bei den Adressen einer Gruppe aktiv unterschiedlich ist, soll in der Spalte Aktiv true stehen.

Wie mache ich das?

himitsu 15. Jun 2022 11:03

AW: Datensätze gruppieren: Wie Feldwert nach Bedingung setzen?
 
Du willst dieses Felder zusammen ziehen, also brauchst du eine Aggregatfunktion.
https://firebirdsql.org/refdocs/lang...-aggrfunc.html

Hier würde ich es mal mit
SQL-Code:
MAX(Aktiv)
versuchen.
Oder notfalls dürfte auch
SQL-Code:
LIST(DISTINCT Aktiv)
gehen, also "True", "False" oder "False,True" (oder so).

Falls Diese keinen BOOL mögen, dann eben mal kurz nach INT oder VARCHAR konvertieren und anschließend wieder zurück.



PS: denkbar wäre auch alles True=True (Haken), alles False=False (leer) und gemischt=NULL (grau).

BlueStarHH 15. Jun 2022 11:18

AW: Datensätze gruppieren: Wie Feldwert nach Bedingung setzen?
 
Zitat:

Zitat von himitsu (Beitrag 1507363)
Hier würde ich es mal mit
SQL-Code:
MAX(Aktiv)
versuchen.

Danke, das wars!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 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