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-Key: 193603

Url: https://administrator.de/contentid/193603

Printed on: April 23, 2024 at 12:04 o'clock

Member: datadexx
datadexx Nov 01, 2012 at 17:06:58 (UTC)
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
Member: LianenSchwinger
LianenSchwinger Nov 01, 2012 at 19:54:26 (UTC)
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
Member: nxclass
nxclass Nov 01, 2012 at 21:33:22 (UTC)
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
Member: datadexx
datadexx Nov 01, 2012 at 22:13:37 (UTC)
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
Member: LianenSchwinger
LianenSchwinger Nov 02, 2012 updated at 07:44:21 (UTC)
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
Member: nxclass
nxclass Nov 02, 2012 at 08:31:22 (UTC)
Goto Top
... ja meins geht natürlich nicht - war schon etwas spät gestern.
LianenSchwinger hat die Lösung.
Member: Biber
Biber Nov 02, 2012 at 08:39:54 (UTC)
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
Member: datadexx
datadexx Nov 02, 2012 at 10:07:29 (UTC)
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!!!