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!
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!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 193603
Url: https://administrator.de/forum/neues-problem-mit-sql-abfrage-193603.html
Ausgedruckt am: 22.12.2024 um 01:12 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
in Oracle würde ich das so lösen:
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.
Gruß Jörg
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
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
für mysql:
... beachte die joins - 3 mal über die selbe Tabelle
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
Moin datatexx,
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
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.@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???
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