AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL-Abfrage über mehrer Tabellen

SQL-Abfrage über mehrer Tabellen

Ein Thema von waldforest · begonnen am 30. Mär 2015 · letzter Beitrag vom 6. Apr 2015
Antwort Antwort
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#1

AW: SQL-Abfrage über mehrer Tabellen

  Alt 2. Apr 2015, 18:48
Hallo,
wie kann ich jetzt noch Rechnungssumme und Anzahl der Rechnungen je Kunde mit integrieren.
Folgendes schlägt fehl

Delphi-Quellcode:
SELECT
   RE.RECHNUNGS_KUNDENNR,
   K.Kunden_ID,
   K.Kunden_Name,
   x.Summe,
   x.anzahl
   FROM FROM RECHNUNG RE
   INNER JOIN KUNDEN K
     ON (K.KUNDEN_ID = RE.RECHNUNGS_KUNDENID)
   INNER JOIN ADRESSE A
     ON (K.KUNDEN_ID = A.KundenID) and (A.AdressTyp = 'Hauptadresse')
   INNER JOIN LAENDER L
     ON (A.LAND_ID = L.Laender_ID) and (L.LAENDER_EU = '1')
   INNER JOIN (SELECT
                  Count(*) as anzahl,
                  SUM(RECH.RE_BETRAG) as Summe
                FROM RECHNUNG Rech
                Group by Rech.RECHNUNGS_KUNDENID) as x
oder Alternativ
Delphi-Quellcode:
SELECT
   RE.RECHNUNGS_KUNDENID,
   K.Kunden_Name,
  ( SELECT COUNT(*) FROM RECHNUNGEN  Rech) AS Anzahl,
  ( SELECT SUM(RECHNUNGS_BETRAG_D) FROM RECHNUNGEN  Rech) AS Summe

  FROM FROM RECHNUNG RE
  INNER JOIN KUNDEN K
    ON (K.KUNDEN_ID = RE.RECHNUNGS_KUNDENID)
  INNER JOIN ADRESSE A
    ON (K.KUNDEN_ID = A.KundenID) and (A.AdressTyp = 'Hauptadresse')
  INNER JOIN LAENDER L
    ON (A.LAND_ID = L.Laender_ID) and (L.LAENDER_EU = '1')
  Group by RE.RECHNUNGS_KUNDENID)
Laufen auf Fehler sobald ich z.B. Werte aus der Kundentabelle hinzufüge, hier K.Kunden_Name,
Ich kann mir nicht erklären, warum.
mfg wf

Geändert von waldforest ( 2. Apr 2015 um 20:37 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: SQL-Abfrage über mehrer Tabellen

  Alt 3. Apr 2015, 06:53
In Deinem ersten Versuch fehlt im Select neben Summe und Anzahl ein Feld (ID) über das der Join gehen soll. Außerdem fehlt das Joinkriterium.
Im 2. Versuch fehlt die Gruppierung des neu aufgenommenen Feldes. Falls Du von mySQL kommst, da kann man das je nach Konfiguration weglassen, ist aber m.E. nicht empfehlenswert, weil die DB sich dann selbst überlegen muss, wonach gruppiert werden soll und das macht mySQL schon nicht gut. Also mach es lieber selbst, ich kenne keine andere DB (auch nicht Firebird), die so eine schreibweise akzeptiert.
Faustregel, * alle Felder der Select Clause, die nicht aggregiert werden, müssen in die Group By Clause aufgenommen werden.

* hier könnte ein "Mindestens" rein, es dürfen halt auch mehr sein, macht aber selten Sinn. Bedeutet, man kann nach Feldern gruppieren, die nicht ausgegeben werden.
Gruß, Jo
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: SQL-Abfrage über mehrer Tabellen

  Alt 3. Apr 2015, 08:29
Hallo,
vielen Dank, für den Hinweis, hatte ich übersehen.
Habs dann doch noch hinbekommen
mfg wf

Geändert von waldforest ( 3. Apr 2015 um 10:34 Uhr)
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: SQL-Abfrage über mehrer Tabellen

  Alt 4. Apr 2015, 09:18
Hallo,
ich möchte meine Abfrage nun um eine zusätzliche Summenabfrage erweitern.

Wie kann ich nun, auf Basis der ersten Abfrage Daten, per SQL auf diese Daten zugreifen. Ich möchte zur Optimierung vermeiden, dass ich zwecks Summenbildung wieder auf die gesamte Datentabelle zurückgreifen muss. Ich denke Master/Detail ist hier der Weg oder ?


Wie kann ich dies umsetzten ?
mfg wf

Geändert von waldforest ( 4. Apr 2015 um 09:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: SQL-Abfrage über mehrer Tabellen

  Alt 4. Apr 2015, 09:44
Nach der Abfrage befindet sich das Ergebnis nicht mehr auf dem Server. Somit ist eine weitere Bearbeitung oder erneute Abfrage auf dem Server nicht mehr möglich.

Möglich ist die Rückgabe von mehreren Resultsets (z.B. aus einer Stored Procedure). Dort würde man die Daten in eine temporäre Tabelle schreiben, diese zurückliefern und dann noch eine Aggregate-Abfrage über die temporäre Tabelle zurückliefern.

Der einfachste Weg führt eigentlich über das Resultset am Client, wo man die Aggregates selber bildet.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.877 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: SQL-Abfrage über mehrer Tabellen

  Alt 4. Apr 2015, 09:44
Was meinst Du mit zusätzlicher Summe?
U.U. wäre eine SP sinnvoll.
Markus Kinzler
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: SQL-Abfrage über mehrer Tabellen

  Alt 4. Apr 2015, 09:58
Hallo,
für mich selber noch einmal zum Verständnis.
Die Abfragemenge befindet sich bei mir nun in einer Query (z.B. Query_SteuerJahr) mit zugehöriger Datasource.

Eine direkter Summenbildung , z.B. der Umsatzbeträge aus Query_SteuerJahr ist über SQL nicht möglich, bedeutet, muss diese Datenmenge in einer Procedure (z.B. Summierung über einen Durchlauf der einzelnen Datenmengen) bilden, oder vorher alles in eine Temporäre Tabelle ablegen ?
mfg wf

Geändert von waldforest ( 4. Apr 2015 um 10:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: SQL-Abfrage über mehrer Tabellen

  Alt 4. Apr 2015, 10:08
Überleg doch mal, wo sich was befindet und wer wann was wie abarbeitet.

Die Datenbank kennt deine Query-Komponente nicht. Die Query-Komponente sendet das Statement zur Datenbank, die Datenbank führt das Statement aus und liefert das Ergebnis zurück. Die Query-Komponete wertet dieses Ergebnis aus und stellt es der Anwendung zur Verfügung.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.877 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: SQL-Abfrage über mehrer Tabellen

  Alt 4. Apr 2015, 10:10
Die SP läuft auch auf dem Datenbankserver und kann in einer Abfrage wie eine Tabelle abgefragt werden.

Noch mal die Frage, was meinst Du mit weiterer Summe? Summierung über anderes Feld? Weitere Einschränkung?
Markus Kinzler
  Mit Zitat antworten Zitat
Texas

Registriert seit: 15. Jul 2005
Ort: Laatzen
59 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

AW: SQL-Abfrage über mehrer Tabellen

  Alt 6. Apr 2015, 19:47
Du kannst auch ein VIEW aus der ersten Select Anweisung erstellen und davon dann ein
neues Select mit SUM, MAX, WHERE etc erstellen

Gruß Michael
Michael
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz