Anmelden

View Full Version : Zwischensummen in SQL?



ahinrichs
10-03-06, 11:20
Hallo *all
kann man mit einem SQL Statement mehrstufige Zwischensummen bilden?
Ich möchte aus einer Tabelle mit Werk, User, Datum, Beginn, Arbeitsart, Stunden
eine Liste mit Zwischensummen nach Werk, User, Tag und Monat.
Also in etwa so:


Werk User Datum Std
MM01 Willy 01.02.2006 7,5
MM01 Willy 02.02.2006 7,5
MM01 Willy JANUAR 15,0


Danke für alle Antworten

janwijnants
10-03-06, 12:22
Hallo,

vielleicht nicht das shönste SQL-statement und nicht ganz genau was sie wollen, aber ich würde das so machen:

with t1 as (
select twerk, tuser, cast(month(tdatum) as char(10)) as d1,
' ' concat cast(tdatum as char(10)) as d2,
sum(tstd) from qtemp/t
group by twerk, tuser, tdatum),
t2 as (
select twerk, tuser, cast(month(tdatum) as char(10)) as h1,
tstd
from qtemp/t),
t3 as (
select twerk, tuser, h1 as d1, '_' as d2, sum(tstd) from t2
group by twerk, tuser, h1)
select * from t1
union all
select * from t3
order by twerk, tuser, d1, d2

Grüsse,

Jan

B.Hauser
10-03-06, 12:33
Zwischen Summen können mit Hilfe einer Union-Anweisung ermittelt werden. Das einzige Problem ist es die beiden Selekt-Anweisungen anschließend so zu sortieren, dass es auch wirklich Zwischensummen sind. Ein weiteres Problem könnte hier das Datum verursachen.

Das folgende SQL-Statement sollte allerdings funktionieren:


with Detail as (Select Werk, Benutzer, Char(Datum, ISO)as Datum, Std
from MyTable),
Summe as (Select Werk, Benutzer, Substr(Datum, 1, 7) as Datum,
sum(Std) as Std
from Detail
Group by Werk, Benutzer, Substr(Datum, 1, 7))
Select d.* from Detail d
Union
Select Werk, Benutzer, Datum concat x'FF', Std
from Summe
Order by 1, 2, 3

Fuerchau
10-03-06, 15:49
Und das Ganze jetzt as mehrstufiger Gruppewechsel á la AS/400-Query !

Da würde ich doch lieber direkt Query nehmen und das Ganze in eine Ausgabedatei umleiten. Da habe ich dann auch ein Feld BreakLevel für die Gruppenstufe sowie die Totale.

ahinrichs
13-03-06, 08:35
Vielen Dank für die schnellen Antworten!