# Summen und Zwischensummen in SQL-Abfragen



## jupp hintz (27. Juni 2008)

Hallo Leute,

könnt ihr mir als SQL-Neuling bitte mitteilen, mit welchem Code ich bei SQL-Abfragen Summen oder sogar Zwischensummen bilden kann?

Das Ergebnis sollte dann so aussehen:

(Semikolon trennt die Spalten)

Kalenderwoche; Menge; Euro;Typ
32; 1 ; 222,22;1
32; 5 ; 111,11;2
---------------------
32; 6; 333,33;-    --> Zwischensummen

33; 2; 500,00;1
33; 6; 120,00;4
33; 1;  80;00;2
---------------------
33; 9; 700,00;-    --> Zwischensummen

-;15;1033,33;- Gesamtsumme


1. Könnt ihr mir sagen wie das mit den Summen bzw. Zwischensummen für diese Tabelle gemacht werden kann?

2. Die Kalenderwochen sind in der Datenbank als Datum hinterlegt (Z.B. 01.12.2007). Könnt ihr mir sagen, wie ich diese als Kalenderwoche formatiert ausgebe und entsprechend danach sortiere?

3. Diese Summen und sortierung möchte ich auch einmal sortiert nach dem "Typ" haben. Wäre euch dankbar für eine Hilfe.


Vielen Dank im Voraus für jede HIlfe.


Gruß

Jupp

Könnt ihr mir sagen


----------



## dbwizard (27. Juni 2008)

jupp hintz hat gesagt.:


> Hallo Leute,
> 
> könnt ihr mir als SQL-Neuling bitte mitteilen, mit welchem Code ich bei SQL-Abfragen Summen oder sogar Zwischensummen bilden kann?
> 
> ...



- Hallo,

Bitte immer DB System mit angeben..

Für Oracle wäre folgendes ein Möglichkeit :


```
select grouping(deptno), grouping(job),
           deptno, sum(sal) amt
    from emp
    group by ROLLUP(deptno, job)
    /
```

- Dies ist als Beispiel mit dem Scott/Tiger Schema, musst du noch anpassen auf deinen Fall


Gruss


----------



## jupp hintz (27. Juni 2008)

Hallo,

vielen Dank für deine Antwort. Ich muss zugestehen, dass ich leich überfordert damit bin.
Diese SQL-befehle gebe ich in einer Software ein, deren Datenbank auf dem SQL Express Server 2005 stehen. Ich hoffe, dass hilft etwas weiter.

Deine Syntax kann ich leider nicht verstehen. Sorry.

deptno, job kann ich nicht zuordnen.

Als kleine zusätzliche Frage: Könnt ihr mir tipps geben, wie ich am besten schnell fit werden in Sql. ICh habe bereits ein paar Baisc mit dem datadidact Scrip: "Einführung in relationale DB-Systeme am Beispiel Access 2000". Wie kann ich darauf sinnvoll für solchen Bedürfnisse aufbauen?


Aber zurück zu der primären Frage: 

Ich habe deine Syntax nach besten (wenigen) Wissen angepasst und wie folgt eingetütet:

"
select grouping(Belegnummer), grouping(Brutto),Belegnummer, sum(Brutto) MoneyMaker
from BELEG
group by ROLLUP(Belegnummer, Brutto);
"
Dabei erhalte ich folgende Fehlermeldung:
"
'Rollup' wird nicht als Name einer integrierten Funktion erkannt.
"

Versuche ich die Group by funktion rauszunehmen, erhalte ich eine andere Fehlermeldung:
"
Eine GROUPING-Funktion kann nur angegeben werden, wenn CUBE oder ROLLUP in der GROUP BY-Klausel angegeben wird.
"

Kannst du mir bitte sagen was ich noch falsch mache?


Gruß
Jupp


----------



## dbwizard (27. Juni 2008)

jupp hintz hat gesagt.:


> Hallo,
> 
> 
> Deine Syntax kann ich leider nicht verstehen. Sorry.
> ...



- Ja, deswegen ist es immer von Nutzen, wenn du bei einer Frage das verwendete Datenbanksystem angibst. Mein Beispiel war für Oracle ...Ich habe auch keine Ahnung, wie es im MSSQL aussieht, sorry


Gruss


----------



## jupp hintz (27. Juni 2008)

dennoch lieben dank für deine Bemühungen.

Kann mir denn noch jemand bei meinem Problem Helfen?

mfg

Jupp


----------



## dbwizard (27. Juni 2008)

jupp hintz hat gesagt.:


> dennoch lieben dank für deine Bemühungen.
> 
> Kann mir denn noch jemand bei meinem Problem Helfen?
> 
> ...



- Hmm, ich habe mal nach MSSQL ROLLUP gegurgelt...und x Treffer erhalten. Der erste Link führte zu folgenden Code-Snipplet :


```
....
GROUP BY categoryname, subcategoryname, productname WITH ROLLUP
```

- Versuch doch mal, ob du damit etwas anfangen kannst. In der SQL Server Doku wird sicher auch etwas über "WITH ROLLUP" stehen

Gruss


----------



## jupp hintz (27. Juni 2008)

Hallo,

danke für die Hilfe:


habe momentan folgenden Codegewülst:

-----------------------------------------------------------
select grouping(Datum),grouping(Belegnummer), Datum, Belegnummer, sum(Brutto) Gesamtsumme
from BELEG
where Belegtyp='R'
GROUP BY Datum, Belegnummer WITH ROLLUP;
-----------------------------------------------------------

Der macht mir hier dann schon für jeden Tag summen. Könnt ihr mir helfen, die Summe je Kalenderwoche darzustellen? Wie stellt man denn eigentlich Kalenderwochen in SQL dar?


Lieben Dank für die Hilfen

Jupp


----------

