Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL: Wie Summen zweier Abfragen als Gesamtsumme ausgeben? (https://www.delphipraxis.net/90572-sql-wie-summen-zweier-abfragen-als-gesamtsumme-ausgeben.html)

BlueStarHH 19. Apr 2007 17:15

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

SQL: Wie Summen zweier Abfragen als Gesamtsumme ausgeben?
 
Momentan führe ich zwei sehr komplexe selects aus und stelle mit union die Summen dieser beiden Abfragen getrennt untereinander da. Nun möchte ich im Result noch eine dritte Zeile haben, die die Gesamtsumme beider Abfragen enthält. Ich könnte dies wie unten angegeben durch eine weitere Abfrage machen, die Abfrage 1 und 2 kombiniert und diese Gesamtsumme dann mit einem union anfügen. Das ist jedoch nicht gerade performant, da dann ja Abfrage 1 und 2 nochmal ausgeführt werden. Wie kaann ich also die Ergebnisse ganz einfach zusammenzählen, ohne erneut Abfragen zu müssen?


SQL-Code:
select sum(Betrag) from tabelle_a where xyz

union

select sum(Betrag) from tabelle_a where abc

union

select sum(Betrag) from tabelle_a where abc or xyz
Beispiel:
SQL-Code:
sum(Betrag)
100
 50
150

mkinzler 19. Apr 2007 17:30

Re: SQL: Wie Summen zweier Abfragen als Gesamtsumme ausgeben
 
mach ein Upgrade auf FB2.0 und dann:
SQL-Code:
select sum from(
select sum(Betrag) from tabelle_a where xyz

union

select sum(Betrag) from tabelle_a where abc

union

select sum(Betrag) from tabelle_a where abc or xyz);

mkinzler 19. Apr 2007 17:45

Re: SQL: Wie Summen zweier Abfragen als Gesamtsumme ausgeben
 
Zitat:

Zitat von mkinzler
mach ein Upgrade auf FB2.0 und dann:
SQL-Code:
select sum( betrag) from(
select sum(Betrag) as Betrag from tabelle_a where xyz

union

select sum(Betrag) as betrag from tabelle_a where abc

union

select sum(Betrag) as betrag from tabelle_a where abc or xyz);


BlueStarHH 19. Apr 2007 17:53

Re: SQL: Wie Summen zweier Abfragen als Gesamtsumme ausgeben
 
Du meinst wohl:
SQL-Code:
select sum(betrag) from(
select sum(Betrag) as Betrag from tabelle_a where xyz

union

select sum(Betrag) as betrag from tabelle_a where abc);
Das ist glaube ich nicht ganz das was ich wollte. Erhalte ich dadurch nicht nur eine einzige Summe? Ich möchte die zwei Summen der beiden Abfragen haben und eine Gesamtsumme.

shmia 19. Apr 2007 18:07

Re: SQL: Wie Summen zweier Abfragen als Gesamtsumme ausgeben
 
Man muss die Daten übrigens mit UNION ALL vereinigen. Wenn man nur mit UNION arbeitet,
werden Datensätze mit gleichem Inhalt ausgefiltert.
Zitat:

Ich möchte die zwei Summen der beiden Abfragen haben und eine Gesamtsumme.
Das lässt sich mit einer SQL-Abfrage nur schwer bewältigen:
SQL-Code:
select sum(Betrag) as Betrag from tabelle_a where xyz
union all
select sum(Betrag) as betrag from tabelle_a where abc)
union all
select sum(betrag) from( 
select sum(Betrag) as Betrag from tabelle_a where xyz
union all
select sum(Betrag) as betrag from tabelle_a where abc)
Das sollte man besser Clientseitig ausrechnen und präsentieren.

mkinzler 19. Apr 2007 18:09

Re: SQL: Wie Summen zweier Abfragen als Gesamtsumme ausgeben
 
SQL-Code:
select
    sum(b1.Betrag) as summe1,
    sum(b2.Betrag) as summe2,
    sum(b1.Betrag)+sum(b2.Betrag) as summe
from
    tabelle_a b1, tabelle_a b2
where
    b1. ... = abc and b2. ... = xyz;

BlueStarHH 19. Apr 2007 20:57

Re: SQL: Wie Summen zweier Abfragen als Gesamtsumme ausgeben
 
Zitat:

Zitat von mkinzler
SQL-Code:
select
    sum(b1.Betrag) as summe1,
    sum(b2.Betrag) as summe2,
    sum(b1.Betrag)+sum(b2.Betrag) as summe
from
    tabelle_a b1, tabelle_a b2
where
    b1. ... = abc and b2. ... = xyz;

Wenn ich das so mache, sind die Summen drastisch zu hoch. Mit meinen Beispieldaten sollte z.b. 2000 als Summe herauskommen. Es kommen aber über 400000 raus. Evtl. wird durch die Abfrage irgendwie das Kreuzprodukt oder ähnl. gebildet und das muss noch eleminiert werden? Die Abfrage läuft auch über 4 Minuten. Die Einzelabfragen sind drastisch schneller.

mkinzler 19. Apr 2007 21:01

Re: SQL: Wie Summen zweier Abfragen als Gesamtsumme ausgeben
 
Stimmt, man müßte Gruppieren

BlueStarHH 19. Apr 2007 21:26

Re: SQL: Wie Summen zweier Abfragen als Gesamtsumme ausgeben
 
Zitat:

Zitat von mkinzler
Stimmt, man müßte Gruppieren

Hast Du auch einen Tipp wie?

mkinzler 20. Apr 2007 06:33

Re: SQL: Wie Summen zweier Abfragen als Gesamtsumme ausgeben
 
Poste mal die Struktur der Datenbannk (Tabellen-Metadaten)


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