Discussion:
SQL: Zwei verschiedene Summen im Select
(zu alt für eine Antwort)
Burkhard Schneider
2009-09-02 11:23:34 UTC
Permalink
Hallo zusammen,

Ich habe dieses SQL-Statement:

SELECT Kostenstellen.NR,
Sum(Gesamt.Kosten) as Summe
FROM (Gesamt LEFT JOIN Kostenstellen ON Gesamt.NR = Kostenstellen.NR)
LEFT JOIN Projekte ON Gesamt.PROJ_NR = Projekte.PROJ_NR
Where Projekte.Sonder=0
Group By Kostenstellen.NR

Jetzt will ich eine zweite Summe über alle Projekte, aber mit
Projekte.Sonder>0. Beide Summen sollen in einer Zeile erscheinen.

Ich bräuchte also etwas in der Art:

SELECT Kostenstellen.NR,
Sum(Gesamt.Kosten) as Summe1 (mit Where Projekte.Sonder=0)
Sum(Gesamt.Kosten) as Summe2 (mit Where Projekte.Sonder>0)
FROM (Gesamt LEFT JOIN Kostenstellen ON Gesamt.NR = Kostenstellen.NR)
LEFT JOIN Projekte ON Gesamt.PROJ_NR = Projekte.PROJ_NR
Group By Kostenstellen.NR

Ist das irgendwie möglich?
mit D2007 und DBISAM

Gruß
Burkhard Schneider
Lothar Armbrüster
2009-09-02 16:02:17 UTC
Permalink
Post by Burkhard Schneider
Hallo zusammen,
SELECT Kostenstellen.NR,
Sum(Gesamt.Kosten) as Summe
FROM (Gesamt LEFT JOIN Kostenstellen ON Gesamt.NR = Kostenstellen.NR)
LEFT JOIN Projekte ON Gesamt.PROJ_NR = Projekte.PROJ_NR
Where Projekte.Sonder=0
Group By Kostenstellen.NR
Jetzt will ich eine zweite Summe über alle Projekte, aber mit
Projekte.Sonder>0. Beide Summen sollen in einer Zeile erscheinen.
SELECT Kostenstellen.NR,
Sum(Gesamt.Kosten) as Summe1 (mit Where Projekte.Sonder=0)
Sum(Gesamt.Kosten) as Summe2 (mit Where Projekte.Sonder>0)
FROM (Gesamt LEFT JOIN Kostenstellen ON Gesamt.NR = Kostenstellen.NR)
LEFT JOIN Projekte ON Gesamt.PROJ_NR = Projekte.PROJ_NR
Group By Kostenstellen.NR
Ist das irgendwie möglich?
mit D2007 und DBISAM
Gruß
Burkhard Schneider
Also auf einer richtigen Datenbank (tm) würde ich soetwas machen:

select
Kostenstellen.NR,
sum(case when Projekte.Sonder=0 then Gesamt.Kosten else 0 end) as summe1,
sum(case when Projekte.Sonder>0 then Gesamt.Kosten else 0 end) as summe2
FROM (Gesamt LEFT JOIN Kostenstellen ON Gesamt.NR = Kostenstellen.NR)
LEFT JOIN Projekte ON Gesamt.PROJ_NR = Projekte.PROJ_NR
Group By Kostenstellen.NR

Ich weiß jetzt nicht, ob DBISAM soetwas kann, aber ggf. geht statt des case
auch ein iif.

HTH,
Lothar
--
Lothar Armbrüster | ***@t-online.de
Hauptstr. 26 |
65346 Eltville |
Burkhard Schneider
2009-09-03 07:05:52 UTC
Permalink
Post by Lothar Armbrüster
select
Kostenstellen.NR,
sum(case when Projekte.Sonder=0 then Gesamt.Kosten else 0 end) as summe1,
sum(case when Projekte.Sonder>0 then Gesamt.Kosten else 0 end) as summe2
FROM (Gesamt LEFT JOIN Kostenstellen ON Gesamt.NR = Kostenstellen.NR)
LEFT JOIN Projekte ON Gesamt.PROJ_NR = Projekte.PROJ_NR
Group By Kostenstellen.NR
Ich weiß jetzt nicht, ob DBISAM soetwas kann, aber ggf. geht statt des case
auch ein iif.
DBISAM kann. Danke, genau so geht es.

Gruß
Burkhard Schneider
Philipp Müller
2011-04-06 08:43:28 UTC
Permalink
Tut Mir leid dieses Thema auszugraben,
Aber ich habe ein =C3=A4hnliches Problem.

Die L=C3=B6sung wie sie hier gezeigt wird funktioniert bei mir auch nur habe ich zuvi=
ele Summen.
Wie kann ich das in eine Schleife verpacken ?

Summe z=C3=A4hlt einfach nur hoch... und sollte dann auch die Variable Hochz=C3=A4=
hlen (soll1,soll2,soll3,.....)

Select
=

Sum(Case When data.sollkonto >=3D data.bereich.`Von Konto`
And data.sollkonto <=3D data.bereich.`Bis Konto`
And data.Zeile =3D 1 Then data.sollbetrag Else 0
End) As soll1,
=

Sum(Case When data.sollkonto >=3D data.bereich.`Von Konto`
And data.sollkonto <=3D data.bereich.`Bis Konto`
And data.Zeile =3D 2 Then data.sollbetrag Else 0
End) As soll2

From
data,
data.bereich Join data.text On data.bereich.Zeile =3D
data.text.Zeile

Danke schoneinmal f=C3=BCr die Hilfe.

Loading...