Announcement

Collapse
No announcement yet.

kumulierte Umsätze in Firebird 2.5

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    Zuletzt editiert von ronin269; 05.08.2016, 15:42.

  • #2
    Originally posted by ronin269 View Post
    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:
    [highlight=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)

    [/highlight]

    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

    Comment


    • #3
      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

      Comment


      • #4
        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

        Comment

        Working...
        X