Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Select erstellen (https://www.delphipraxis.net/194728-select-erstellen.html)

Dumpfbacke 28. Dez 2017 16:50

Datenbank: Firebrid • Version: 2,5 • Zugriff über: IBX

Select erstellen
 
Hallo Leute,
ich habe ein Problem mit dem erstellen eines Selects.

Als Ergebnis möchte ich die Anzahl der Datensätze aus Tabelle 1 haben Gruppiert dannach ob es in der Tabelle 2 den Status A gibt. In der Tablle 2 kann es ein Datensatz mit dem Status A geben muss jeodch nicht sein. Des weiteren kann es auch sein das es keinen Datensatz in Tabelle 2 gibt.

Ich habe es schon einmla mit einen Left Outer Join versucht was jedoch nicht funktioniert, da in Tabelle 2 der Staus mehrfach vorhanden sein kann.

Beispiel für das von mir gewünschte Ergebnis

count Status
3 <null>
2 A

Die Tabellen sind so aufgebaut (Auf das Minimum hier gekürtzt.
Delphi-Quellcode:
Tabelle1
Zaehler
Auftragsnummer

Tabelle2
Zaehler
Auftragsnummer
Status
Termin
Inhalt der Tabellen
Delphi-Quellcode:
Tabelle1:

Zaehler  Auftargsnummer
1          11 
2          12
3          13
4          14
5          15

Tabelle 2:
Zaehler Auftragsnummer  Status Termin
1        11               A     12.12.2017
2        11               A     13.12.2017
3        12               B     07.12.2017               
4        13               A     12.12.2017
Könnt Ihr mir hier bitte helfen ? Ich stehe hier ein wenig auf dem Schlauch.

Tanja

Delphi.Narium 28. Dez 2017 17:04

AW: Select erstellen
 
Bin mir nicht sicher, ob ich die Aufgabenstellung richtig verstanden habe:
SQL-Code:
select
  -- Wie oft kommt der Status vor,
  -- dabei darf ein mehrfachvorkommender Status zu einer Auftragsnummer nur einmal gezählt werden.
  -- Anzahl gibt also an, wieviele unterschedliche Auftragsnummern zum Status vorkommen.
  count(*) as Anzahl, Status
from (
  -- Kombination aus Auftragsnummer und Status soll eindeutig sein.
  select distinct a.Auftragsnummer, b.Status
  from tabelle1 a
  left join tabelle2 b on a.Auftragsnummer = b.Auftragsnummer
)
group by Status
order by Status;

Uwe Raabe 28. Dez 2017 17:06

AW: Select erstellen
 
Kann es gerade nur unter MSSQL probieren, aber da funktioniert auch dies:
SQL-Code:
SELECT COUNT(DISTINCT T1.Auftragsnummer), T2.Status
FROM Tabelle1 T1
LEFT JOIN Tabelle2 T2 ON T1.Auftragsnummer = T2.Auftragsnummer AND T2.STATUS = 'A'
GROUP BY T2.Status

Delphi.Narium 28. Dez 2017 17:12

AW: Select erstellen
 
Firebird kommt mit Count(Distinct spalte) wohl auch klar, damit ist Uwes Lösung kürzer und übersichtlicher.

Dumpfbacke 28. Dez 2017 17:55

AW: Select erstellen
 
Hallo Jungs,
ihr seit einfach super hier. Man so einfach kann es sein wenn man weiß wie es geht. Danke für Euer schnelles Antworten hier. Ich dachte schon ich bekomme es niemals hin.

Danke Tanja :thumb:


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