Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Query benötigt (https://www.delphipraxis.net/215056-query-benoetigt.html)

noisy_master 30. Apr 2024 15:22

Datenbank: Paradox • Version: 7.x • Zugriff über: BDE

Query benötigt
 
Hallo Gemeinde,

leider ist der Umbau meiner Software weg von der BDE noch lange nicht beendet. Aber es kommen neue Anfragen rein, die ich irgendwie umsetzen muss. Also sorry, dass ich schon wieder BDE Fragen stelle.

Gegeben seine 2 Tabellen:
Tabelle A mit Feld
AIndex AName
1test1
2test3
3test2
.


und Tabelle B mit
BIndex BName BAnzahl BValid
1test15True
2test13False
3test34True
4test12True
.

was soll dabei rauskommen:

ANamesum(BAnzahl)
test17
test34
test2-/NULL/0
.


Also nochmal zusammengefasst: es sollen die Anzahlen der in Tabelle vorkommenden "Referenzen" auf A zusammengezählt werden, aber nur da, wo valid= True ist.
Sieht mir nach irgendwas mit Select AName,Sum(BAnzahl) from A Left outer Join on A.AName=B.Bname..... oder so aus, bekomme es aber wieder beim besten willen nicht hin

Hat vielleicht irgendwer von euch die zündende Idee?

Wie immer: Danke schon mal vorab für eure Mühe!

Gruß

Uwe Raabe 30. Apr 2024 16:14

AW: Query benötigt
 
Für BDE kann ich das hier nicht teste, aber sowas sollte gehen:
SQL-Code:
Select A.AName, Sum(B.BAnzahl)
from A
Left Join B on A.AName = B.Bname and V.Valid = True

noisy_master 30. Apr 2024 23:03

AW: Query benötigt
 
Danke Uwe!:thumb:

fehlte noch ein group by a.name, aber ansonsten war es völlig richtig....

Ich liebe dieses Forum..

Danke, danke, Danke


Gruß

Mavarik 1. Mai 2024 15:12

AW: Query benötigt
 
Zitat:

Zitat von noisy_master (Beitrag 1536262)
Also nochmal zusammengefasst: es sollen die Anzahlen der in Tabelle vorkommenden "Referenzen" auf A zusammengezählt werden, aber nur da, wo valid= True ist.
Sieht mir nach irgendwas mit Select AName,Sum(BAnzahl) from A Left outer Join on A.AName=B.Bname..... oder so aus, bekomme es aber wieder beim besten willen nicht hin

Hat vielleicht irgendwer von euch die zündende Idee?

Wie immer: Danke schon mal vorab für eure Mühe!

Gruß

Für so etwas - auch gerne wenn es komplexer ist - nutze ich mittlerweile 100% Chat-GPT. Da kommt "immer" etwas valides raus, wenn man direkt die Tabellen Namen und Feld Namen mit an gibt. ist der code direkt Copy-Paste...

v2afrank 3. Mai 2024 06:00

AW: Query benötigt
 
Zitat:

Zitat von Mavarik (Beitrag 1536291)
Für so etwas - auch gerne wenn es komplexer ist - nutze ich mittlerweile 100% Chat-GPT. Da kommt "immer" etwas valides raus, wenn man direkt die Tabellen Namen und Feld Namen mit an gibt. ist der code direkt Copy-Paste...


Klingt interessant, aber was für eine Frage stellst Du Chat GPT. kannst Du mal ein Beispiel gerne hier an diesem Beispiel geben ? Ich wüsste jetzt nicht wie ich Chat GPT die Tabellen erkläre

Delphi.Narium 3. Mai 2024 09:23

AW: Query benötigt
 
Zitat:

Zitat von Frage an KI
Gegeben seine 2 Tabellen:
Tabelle A mit Feld
AIndex AName
1 test1
2 test3
3 test2
.


und Tabelle B mit
BIndex BName BAnzahl BValid
1 test1 5 True
2 test1 3 False
3 test3 4 True
4 test1 2 True
.

was soll dabei rauskommen:

AName sum(BAnzahl)
test1 7
test3 4
test2 -/NULL/0
.

Also nochmal zusammengefasst: es sollen die Anzahlen der in Tabelle vorkommenden "Referenzen" auf A zusammengezählt werden, aber nur da, wo valid= True ist.

Zitat:

Zitat von Antwort der KI
Um die gewünschten Ergebnisse zu erzielen, können Sie eine SQL-Abfrage verwenden, die die `JOIN`- und `GROUP BY`-Anweisungen verwendet. Hier ist ein Beispiel, wie Sie es tun können:

```sql
SELECT A.AName, COALESCE(SUM(B.BAnzahl), 0) as Summe
FROM TabelleA A
LEFT JOIN TabelleB B ON A.AName = B.BName AND B.BValid = True
GROUP BY A.AName;
```

In dieser Abfrage wird die `LEFT JOIN`-Anweisung verwendet, um alle Einträge aus `TabelleA` beizubehalten und nur die gültigen Einträge aus `TabelleB` hinzuzufügen. Die `COALESCE`-Funktion stellt sicher, dass, wenn es keine übereinstimmenden Einträge in `TabelleB` gibt (d.h., die Summe ist NULL), stattdessen eine 0 zurückgegeben wird. Die `GROUP BY`-Anweisung wird verwendet, um die Ergebnisse nach `AName` zu gruppieren.

Bitte beachten Sie, dass Sie die Tabellennamen und Feldnamen entsprechend Ihrer Datenbankstruktur anpassen müssen.

Die Frage hab' ich hier per Copy&Paste aus Deinem Eingangspost übernommen.

Sprich: Mit der KI redest Du genauso wie mit uns, vergiss einfach, dass Dir da 'ne Maschine antwortet. Führe eine normale Unterhaltung, wie mit Kolleginnen oder Kollegen, dann kommen die besten Ergebnisse heraus. Versucht man irgendwie KI-konform zu fragen, werden die Ergebnisse nicht besser, eher das Gegenteil. Passt das Ergebnis nicht, einfach normal nachfragen. Es ist erstaunlich, wie gut die Ergebnisse dadurch werden.

Da die BDE Coalesce (meines Wissens) nicht kennt, hab' ich mal nachgefragt:
Zitat:

Zitat von Frage an KI
Wie muss die Abfrage aussehen, wenn meine Datenbank die Funktion Coalesce nicht kennt?

Zitat:

Zitat von Antwort der KI
Wenn Ihre Datenbank die `COALESCE`-Funktion nicht unterstützt, können Sie stattdessen die `IFNULL`- oder `ISNULL`-Funktion verwenden, je nachdem, welche Ihre Datenbank unterstützt. Hier ist, wie die Abfrage aussehen könnte:

```sql
SELECT A.AName, IFNULL(SUM(B.BAnzahl), 0) as Summe
FROM TabelleA A
LEFT JOIN TabelleB B ON A.AName = B.BName AND B.BValid = True
GROUP BY A.AName;
```

oder

```sql
SELECT A.AName, ISNULL(SUM(B.BAnzahl), 0) as Summe
FROM TabelleA A
LEFT JOIN TabelleB B ON A.AName = B.BName AND B.BValid = True
GROUP BY A.AName;
```

Bitte beachten Sie, dass Sie die Tabellennamen und Feldnamen entsprechend Ihrer Datenbankstruktur anpassen müssen.

Falls Ihre Datenbank weder `COALESCE`, `IFNULL` noch `ISNULL` unterstützt, könnten Sie eine bedingte `CASE`-Anweisung verwenden, um das gleiche Ergebnis zu erzielen. Hier ist ein Beispiel:

```sql
SELECT A.AName,
CASE WHEN SUM(B.BAnzahl) IS NULL THEN 0 ELSE SUM(B.BAnzahl) END as Summe
FROM TabelleA A
LEFT JOIN TabelleB B ON A.AName = B.BName AND B.BValid = True
GROUP BY A.AName;
```

In dieser Abfrage wird die `CASE`-Anweisung verwendet, um zu überprüfen, ob `SUM(B.BAnzahl)` NULL ist, und wenn ja, wird 0 zurückgegeben, sonst wird der tatsächliche Wert von `SUM(B.BAnzahl)` zurückgegeben.


v2afrank 3. Mai 2024 09:33

AW: Query benötigt
 
Danke total cool. Diese Möglichkeit Beispieltabellen anzulegen kannte ich nicht bzw habe die noch nie genutzt.

Danke


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