Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 4 von 4
  1. #1
    Neuer Benutzer
    Registriert seit
    14.02.2016
    Beiträge
    6

    Standard kumulierte Umsätze in Firebird 2.5

    Hallo an alle,

    ich komme bei einem Problem nicht weiter.

    Ich habe eine Tabelle mit Belegen. Unter anderem gibt es die Spalten

    • Belegdat für Datum
    • ZF_AUF_WERT für Auftragswert


    Ich brauche eine Tabelle die wie folgende Ergebnisse hat:

    Jahr Umsatz (sum(ZF_AUF_WERT) immer 01.01.-aktuelles Datum des Jahres
    2016
    2015
    2013
    2012
    2011
    2010

    Wie bekomme ich es hin, dass immer der Umsatz vom 01.01. bis zum aktuellen Datum (oder gestern) berechnet wird??


    select extract (year from getdate(belegdat))as Jahr,
    sum(case when getdate(belegdat) between '01.01.2010' and cast('now' as date) then ZF_AUF_WERT else 0 end) as Umsatz
    from beleg where belegart = 'AU' and belegdat > '01.01.2010'
    group by Jahr order by Jahr desc";


    Diese Abfrage liefert nur kumuliert für das aktuelle Jahr, aber nicht für die Vorjahre!

    Hat jemand eine Idee?

    Grüße und Danke

    Ronin269
    Geändert von ronin269 (05.08.2016 um 15:42 Uhr)

  2. #2
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.261

    Standard

    Zitat Zitat von ronin269 Beitrag anzeigen
    Hat jemand eine Idee?
    Das Tagedatum muss auf einen brauchbaren Wert normalisiert werden. Die gleiche Normalisierung muss auch auf das Belegdatum angewendet werden.

    ungefähr so:
    Code SQL:
    SELECT EXTRACT(YEAR FROM b.Belegdat ) AS Jahr,
           SUM(b.ZF_AUF_WERT) AS Summe
      FROM belege b
     WHERE EXTRACT(MONTH FROM b.Belegdat) * 100 + EXTRACT(DAY FROM b.Belegdat) 
        <= EXTRACT(MONTH FROM CURRENT_DATE) * 100 + EXTRACT(DAY FROM CURRENT_DATE)
     GROUP BY EXTRACT(YEAR FROM b.Belegdat)

    Dabei ist die Where Bedingung nicht gut für Performance. Du kannst das Verfahren aber genauso in eine Case When Summe übernehmen und Where bedingung für das Datum weglassen.
    Gruß, defo

  3. #3
    Neuer Benutzer
    Registriert seit
    14.02.2016
    Beiträge
    6

    Standard

    Danke defo,

    Wow, brilliant!!!

    mit Current_date kam bei mir
    Client SQL dialect 1 does not support reference to DATE datatype.
    Ich habe es mit
    cast ('now' as DATE)
    ersetzt.

    Jetzt klappt es perfekt.

    Danke

    Ronin269

  4. #4
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.261

    Standard

    Prima!
    Dieser Ansatz hat allerdings den Nebeneffekt, dass Jahre ohne Eintrag nicht erscheinen werden. Aber wahrscheinlich kommt das nicht vor. Ansonsten muss man die Jahre in einer separaten Tabelle / Abfrage raussuchen, um auch die Lücken mit Summe 0 zu erhalten.
    Gruß, defo

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •