Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select um Daten zu grupieren (https://www.delphipraxis.net/207111-select-um-daten-zu-grupieren.html)

Dumpfbacke 25. Feb 2021 08:58

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX

Select um Daten zu grupieren
 
Hallo Leute,
ich brauche mal Hilfe beim erstellen eines Selects.

Hier zuerst mal der Aufbau der Datenabk welcher leider nicth geändert werden kann.

Delphi-Quellcode:
Regal,Fach,Art,               Artikelnummer
1,    1, Grundbedarf,       123456
1,    1, Erweiterungsbedarf1 987654
1,    1, Erweiterungsbedarf2 125478
2,    1, Grundbedarf,       546287
3,    1, ErweiterungsbedarfA 741365
Als Ergebnis möchte ich haben

1, 1, Grund, Erweiterung
2, 1, Grund,
3, 1, , Erweiterung

Bei mir kommt bis jetzt höchstens dieses hier raus

1, 1, Grund,
1, 1, , Erweiterung
1, 1, , Erweiterung
2, 1, Grund,
3, 1, , Erweiterung

Code:
Select Regal,Fach,iif(Art starting with 'Grund','Grund',''), iif(Art not starting with 'Grund','Erweiterung','')
From Lager
where Art <> ''
group by Regal,Fach,art
Es kann in der Tabelle je Regal je Fach keine Zeile, einen Zeile oder mehrere Zeit mit Grundbedarf geben. Genau so bei Erweiterung.

Als Ergebnis möchte ich also je Regal je Fach sehen ob dort kein oder mindestens ein Grund und / oder eine Erweiterung vorhanden ist.

Als Bonus wäre es noch schon wenn es noch eine weitere Spalte gebne könnte wo die Anzahl der Erweiterungen in Summe gezählt werden würde.

Könnt Ihr mir da mal auf die Sprünge helfen. Ich bekomme es nicht hin

Danke schon einmal Tanja.

mkinzler 25. Feb 2021 09:06

AW: Select um Daten zu grupieren
 
In etwa so
SQL-Code:
select
  Regal, Fach, List( Art, ',')
from
  <Tabelle>
group by
  Regal, Fach;

DeddyH 25. Feb 2021 09:13

AW: Select um Daten zu grupieren
 
Nur mal als Idee:
SQL-Code:
SELECT
  Regal,
  Fach,
  SUM(CASE WHEN Art STARTING WITH 'Grund' THEN 1 ELSE 0 END),
  SUM(CASE WHEN Art NOT STARTING WITH 'Grund' THEN 1 ELSE 0 END)
FROM
  Uetech_Rebell
WHERE
  Art <> ''
GROUP BY
  Regal, Fach
Die Ergebnismenge enthält weder "Grund" noch "Erweiterung", da diese IMHO nicht aussagekräftig sind, sondern stattdessen die Anzahl der Vorkommen (theoretisch, da ungetestet).

dataspider 25. Feb 2021 09:29

AW: Select um Daten zu grupieren
 
oder mit CTE:

Code:
with thelp as
       (select distinct
               t.regal
             , t.fach
             , iif(t.art like 'Grund%', 'Grund', iif(t.art like 'Erweiterung%', 'Erweiterung', '')) art
               from uetech_rebell t)
select t.regal
     , t.fach
     , (select list(thelp.art) from thelp where thelp.regal = t.regal and thelp.fach = t.fach)

 from
     (
        select distinct
               regal
             , fach
               from thelp
     ) t

Dumpfbacke 25. Feb 2021 09:55

AW: Select um Daten zu grupieren
 
Danke an alle jetzt funktioniert es so wie ich es haben wollte. Ich habe die Lösung hier von DeddyH genommen. Die List funktion von mkinzler kannte ich noch nicht bis jetzt. Dieses eröffnet ganz andere Möglichkeiten. Deshalb hier noch eine Erweiterung meiner Frage hier. Kann man noch zwei weitere Spalten erzeugen in dem Select von DeddyH welche die Werte mit List auflisten . Es sollte dann in der eine Spalte die Liste alle Möglichkeiten der Grund und in der zweiten Spalte die Liste alle Möglichkeiten der Erweitungen vorhanden sein ?

Tanja

DeddyH 25. Feb 2021 10:02

AW: Select um Daten zu grupieren
 
LIST ist genauso eine Aggregatfunktion wie SUM, also sollte das schon möglich sein.

Dumpfbacke 25. Feb 2021 10:40

AW: Select um Daten zu grupieren
 
Danke es so einfach wenn man nicht blond ist und sich auskennt. Jetzt funktioniert es genau so wie ich es haben möchte.

Tanja


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