AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Query benötigt

Ein Thema von noisy_master · begonnen am 30. Apr 2024 · letzter Beitrag vom 3. Mai 2024
Antwort Antwort
noisy_master

Registriert seit: 17. Jun 2009
Ort: Wolfenbüttel/Baddeckenstedt
257 Beiträge
 
Delphi XE5 Professional
 
#1

Query benötigt

  Alt 30. Apr 2024, 15:22
Datenbank: Paradox • Version: 7.x • Zugriff über: BDE
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ß
Dirk

Geändert von noisy_master (30. Apr 2024 um 15:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.044 Beiträge
 
Delphi 12 Athens
 
#2

AW: Query benötigt

  Alt 30. Apr 2024, 16:14
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
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
noisy_master

Registriert seit: 17. Jun 2009
Ort: Wolfenbüttel/Baddeckenstedt
257 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Query benötigt

  Alt 30. Apr 2024, 23:03
Danke Uwe!

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

Ich liebe dieses Forum..

Danke, danke, Danke


Gruß
Dirk
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Query benötigt

  Alt 1. Mai 2024, 15:12
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...
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
573 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Query benötigt

  Alt 3. Mai 2024, 06:00
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
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.434 Beiträge
 
Delphi 7 Professional
 
#6

AW: Query benötigt

  Alt 3. Mai 2024, 09:23
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 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 von Frage an KI:
Wie muss die Abfrage aussehen, wenn meine Datenbank die Funktion Coalesce nicht kennt?
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.
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
573 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Query benötigt

  Alt 3. Mai 2024, 09:33
Danke total cool. Diese Möglichkeit Beispieltabellen anzulegen kannte ich nicht bzw habe die noch nie genutzt.

Danke
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 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