Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Vorjahreswerte parallel zu aktuellen Werten ausgeben

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von RalfW, 1 Oktober 2015.

  1. RalfW

    RalfW Neuer Benutzer

    Gude aus dem schönen Mittelhessen!

    Ich zermatere mir seit ein paar Tagen das Gehirn auf der Suche nach einer halbwegs eleganten (oder zumindest funktionierenden) Lösung für folgendes Problem:

    Für eine Umsatzauswertung wird eine Ausgabe in folgendem Format benötigt:

    Artikel | Umsatz aktuelles | Umsatz Vorjahr | Menge aktuell | Menge Vorjahr

    Die für diese Auswertung benötigten Daten werden aus zwei Tabellen bezogen: AAGFAKT und AAGFAKTPOS

    In der Tabelle Aufträge befinden sich die für die Fakturierung notwendigen Daten wie Rechnungsdatum etc. aus der Tabelle AAGFAKTPOS werden die Daten der Artikel bezogen (wie z.B. Preis und Menge).

    Die Daten für den aktuellen Monatsumsatz zu beziehen ist kein größeres Problem (siehe Codeschnipsel weiter unten), wie ich die Daten für den Vorjahreszeitraum im gleichen Statement beziehen kann um damit die Spalten "Umsatz Vorjahr" und "Menge Vorjahr" zu befüllen scheitert bei mir anscheinend gerade an einer Denkblockade....

    Ich bin für jeden Hinweis dankbar!

    Code:
    select AAGFAKTPOS.ARTNR1, AAGFAKTPOS.ABEZ1, SUM(AAGFAKTPOS.BERECHMENGE) as Menge, SUM(AAGFAKTPOS.PREIS) as Umsatz
       
    from AAGFAKT
    
    inner join AAGFAKTPOS
    on AAGFAKT.LFDFAKTNR = AAGFAKTPOS.LFDFAKTNR
    
    where
    
    AAGFAKT.FAKTDATUM BETWEEN
    CONVERT(datetime, '01.09.2014 00:00:00', 104)
    AND CONVERT(datetime, '30.09.2014 23:59:59', 104)
    
    group by AAGFAKTPOS.ABEZ1, AAGFAKTPOS.ARTNR1
    order by AAGFAKTPOS.ABEZ1
     
  2. ukulele

    ukulele Datenbank-Guru

    Das ist eigentlich nicht schwer, man muss nur die Tabelle mit sich selbst Joinen. Da deine Ausgangstabelle schon ein Join ist, würde ich das ganze in zwei Teile zerlegen:
    1) Die Daten in einer Sicht aufbereiten (oder wie hier mit WITH eine Tabelle on the fly erzeugen) und nach Jahr / Monat gruppieren.
    2) Das Ergebnis mit sich selbst Joinen aber eben immer auf den Vorjahreszeitraum. Davon dann nur den Zeitraum anfordern, den du brauchst.
    Code:
    WITH t AS (
    SELECT    datepart(yyyy,AAGFAKT.FAKTDATUM) AS Jahr,
            datepart(mm,AAGFAKT.FAKTDATUM) AS Monat,
            AAGFAKTPOS.ARTNR1,
            AAGFAKTPOS.ABEZ1,
            SUM(AAGFAKTPOS.BERECHMENGE) AS Menge,
            SUM(AAGFAKTPOS.PREIS) AS Umsatz
    FROM    AAGFAKT
    INNER JOIN AAGFAKTPOS
    ON        AAGFAKT.LFDFAKTNR = AAGFAKTPOS.LFDFAKTNR
    GROUP BY datepart(yyyy,AAGFAKT.FAKTDATUM),datepart(mm,AAGFAKT.FAKTDATUM),AAGFAKTPOS.ABEZ1, AAGFAKTPOS.ARTNR1
            )
    SELECT    t1.ARTNR1,
            t1.ABEZ1,
            t1.Menge,
            t1.Umsatz,
            t2.Menge AS Menge_Vorjahr,
            t2.Umsatz AS Umsatz_Vorjahr
    FROM    t t1
    LEFT JOIN t t2
    ON        t1.RTNR1 = t2.RTNR1
    AND        t1.ABEZ1 = t2.ABEZ1
    AND        t1.Jahr = t2.Jahr + 1
    AND        t1.Monat = t2.Monat
    WHERE    t1.Jahr = 2014
    AND        t1.Monat = 9
    ORDER BY t1.ARTNR1,t1.ABEZ1
     
Die Seite wird geladen...
Ähnliche Themen - Vorjahreswerte parallel aktuellen
  1. akretschmer
    Antworten:
    0
    Aufrufe:
    1.407
  2. akretschmer
    Antworten:
    0
    Aufrufe:
    1.334

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden