datadexx
Goto Top

Neues Problem mit SQL Abfrage

Hi Leutz,

benötige mal wieder hilfe bei einer SQL Abfrage:

Ich habe in der Tabelle rechnung die Felder kd_nummer, rgdatum und netto.

Jetzt möchte ich gerne folgendes Ergebnis haben:

Kundennummer Umsatz Monat Umsatz Jahr
10000 5.119,39 € 15.777,32 €
10001 xxx xxx
10002 xxx xxx

usw.

Wie bekommt man es hin, das ich in einer Abfrage die summe des Feldes netto für den aktuellen Monat und gleichzeitig die Gesamtsumme für das Jahr für die jeweilige Kundennummer erhalte?

Danke für Hilfe!

Content-ID: 193603

Url: https://administrator.de/forum/neues-problem-mit-sql-abfrage-193603.html

Ausgedruckt am: 22.12.2024 um 01:12 Uhr

datadexx
datadexx 01.11.2012 um 18:06:58 Uhr
Goto Top
Mein Ansatz sieht so aus, jedoch bekomme ich für Monat und Jahr die Summen aller Kunden und nicht bezogen auf den jeweiligen Kunden.

SELECT KD_NUMMER,
(SELECT SUM(Netto) FROM rechnung WHERE MONTH(RGDatum)=10 AND status !=3 AND GS !=1 ) AS Monat,
(SELECT SUM(Netto) FROM rechnung WHERE YEAR(RGDatum)=2012 AND status !=3 AND GS !=1 ) AS Jahr
FROM rechnung
GROUP BY 1
ORDER BY 1 DESC
LianenSchwinger
LianenSchwinger 01.11.2012 um 20:54:26 Uhr
Goto Top
Hallo,

in Oracle würde ich das so lösen:
SELECT kd_nummer,
       SUM(DECODE(EXTRACT(MONTH FROM rgdatum),EXTRACT(MONTH FROM SYSDATE),netto,0)) SumAktMontat,
       SUM(netto) SumJahr
FROM rechnung
WHERE rgdatum >= TRUNC(SYSDATE,'YYYY')  
AND status != 3 
AND gs != 1
GROUP BY kd_nummer
ORDER BY kd_nummer
Den DECODE Teil macht nur "wenn Rechnungsmonat = aktueller Monat dann summiere Netto sonst 0.
Wenn ich das richtig sehe kannst Du den Extract(..) durch MONTH(rgdatum) ersetzen.
Mit dem 1. Teil der WHERE-Klausel selektiert nur die Rechnungen des aktuellen Jahres.
Dafür könntest Du auch "YEAR(rgdatum) = YEAR(SYSDATE)" schreiben.

Demnach musst Du nur noch was finden um den DECODE nachzubilden.
SELECT kd_nummer,
       SUM("wenn" DECODE(MONTH(rgdatum) = MONTH(SYSDATE) "dann" netto "sonst" 0) SumAktMontat,  
       SUM(netto) SumJahr
FROM rechnung
WHERE YEAR(rgdatum) = YEAR(SYSDATE)
AND status != 3 
AND gs != 1
GROUP BY kd_nummer
ORDER BY kd_nummer

Gruß Jörg
nxclass
nxclass 01.11.2012 um 22:33:22 Uhr
Goto Top
für mysql:
SELECT t.kd_nummer, SUM(m.netto) AS 'month', SUM(y.netto) AS 'year'  
FROM table t
  JOIN table m ON (t.kd_nummer = m.kd_nummer)
  JOIN table y ON (t.kd_nummer = y.kd_nummer)
WHERE
  ( MONTH(m.rgdatum) = MONTH(NOW()) AND YEAR(m.rgdatum) = YEAR(NOW()) ) AND
  YEAR(y.rgdatum) = YEAR(NOW())
GROUP BY t.kd_nummer
... beachte die joins - 3 mal über die selbe Tabelle
datadexx
datadexx 01.11.2012 um 23:13:37 Uhr
Goto Top
Hi Jörg, hi nxclass,

Jörg mit deiner Variante werde ich mich morgen auseinander setzen, da hab ich heute keinen kopf mehr für...

@nxclass

Deinen Code hab ich gerade probiert, da es schnell via copy & paste ging, nur kurz table gegen die richtige table ausgetauscht. Mysql liefert ein leeres resultat???

Danke erst mal für eure hilfe, aber für heut hab ich genug face-smile.

Schau morgen wieder rein!

G8
LianenSchwinger
LianenSchwinger 02.11.2012 aktualisiert um 08:44:21 Uhr
Goto Top
Morgen, face-smile

hier meine Variante für MySQL

SELECT kd_nummer, 
       SUM(IF(MONTH(rgdatum) = MONTH(NOW()), netto, 0)) AS SumAktMontat, 
       SUM(netto) AS SumJahr 
FROM rechnung 
WHERE YEAR(rgdatum) = YEAR(NOW()) 
AND status != 3  
AND gs != 1 
GROUP BY kd_nummer 
ORDER BY kd_nummer

Gruß Jörg
nxclass
nxclass 02.11.2012 um 09:31:22 Uhr
Goto Top
... ja meins geht natürlich nicht - war schon etwas spät gestern.
LianenSchwinger hat die Lösung.
Biber
Biber 02.11.2012 um 09:39:54 Uhr
Goto Top
Moin datatexx,

Zitat von @datadexx:
@nxclass

Deinen Code hab ich gerade probiert, da es schnell via copy & paste ging,
nur kurz table gegen die richtige table ausgetauscht.
Mysql liefert ein leeres resultat???
Nicht weiter erstaunlich, da die Zeit unaufhaltsam voranschreitet.
Inzwischen würde bei MONTH(m.rg_datum)=MONTH(NOW()) auf den Monat 11 = November verglichen, und da hast du keine Daten.

Teste mit festen Werten 10 für Oktober (Test Monat) und 2012 für Jahr.

Grüße
Biber
datadexx
datadexx 02.11.2012 um 11:07:29 Uhr
Goto Top
Danke Jungs!

Jörg hatte die Lösung!

@Biber, das hatte ich gestern auch gemacht, da 11 ja keine Daten liefern konnte.

Nice WE!!!