Schichtumsätze über ein Jahr

Werbung:
@akretschmer , also ist die Lösung mit CASE eher ungeschickt?

@ukulele Das dachte ich auch, aber es werden so wie ich das seh alle SB Märkte im Ergebniss zusammen addiert.
sieht dann so aus das ich 3 spalten hab : Datum, Schicht und UmsatzSB 1
und dann eben die gut 600 Zeilen.

Die Lösung wie ich sie mir vorstell wären für jeden SBMarkt eine Spalte mit den Umsätzen.
Vorher wurde angemerkt das wohl Zeilen und dann ummodelln per Pivot Tabelle einfacher geht, damit hab ich natürlich kein Problem wenn es weniger Umstände macht.
 
Kannst du mal ein SELECT DISTINCT left(StationName,6) FROM tabelle machen und das Ergebniss hier posten? Es soll definitiv aus SB X Kasse X nur SB X werden. Wenn das nicht geht dann ist das Format anders als ich bisher angenommen habe.
 
Das klappt teilweise, in der Tabelle sind nicht nur die SB Markt Kassen sondern alle Kassen hier im Werk, also auch Restaurants, Shops etc.
Diese werden also auch angezeigt und bei den einstelligen SB Märkten auch noch das K.
Hier mal bildlich (die anderen Kassen muss ich leider wieder rausstreichen)

upload_2015-6-19_10-57-39.png
 
Code:
SELECT    t.Datum,
        t.Schicht,
        sum(t.UmsatzSB1) AS UmsatzSB1

FROM    (

SELECT    left(StationName,patindex('%[0-9]%',StationName)+charindex(' ',right(StationName,len(StationName)-patindex('%[0-9]%',StationName)))-1) AS Standort,
--        Umsätze ab 22.00 Uhr werden der Nachtschicht des nächsten Tages zugerechnet
        (    CASE
            WHEN    datepart(hh,[Date]) BETWEEN 22 AND 23
            THEN    dateadd(day,1,cast([Date] AS DATE))
            ELSE    cast([Date] AS DATE)
            END ) AS Datum,
        (    CASE
            WHEN    datepart(hh,[Date]) BETWEEN 22 AND 23
            OR        datepart(hh,[Date]) BETWEEN 0 AND 5
            THEN    'Nacht'
            WHEN    datepart(hh,[Date]) BETWEEN 6 AND 13
            THEN    'Früh'
            WHEN    datepart(hh,[Date]) BETWEEN 14 AND 21
            THEN    'Spät'
            ELSE    'Fehler/Zeit'
            END ) AS Schicht,
        Salesbezeichnung AS UmsatzSB1
FROM    "Datenbankname"."dbo"."FirmaSales"
WHERE    datepart(year,[Date]) = 2015
AND        StationName LIKE 'SB [0-9]% %'

        ) t

GROUP BY t.Datum,t.Schicht
ORDER BY t.Datum,t.Schicht
Ich habe die Formel zur Bestimmung des Standortes "etwas" erweitert und eine WHERE Bedingung hinzugefügt. Es werden jetzt nur Umsätze gezählt, wenn StationName mit "SB " anfängt und darauf irgendwo eine Zahl und ein Leerschritt folgen. Alles bis zum ersten Leerschritt hinter der ersten Zahl wird als Standort genommen. Funktioniert das besser?
 
Einen wunderschönen Montag morgen, ich hoffe ihr habt das Wochenende gut überstanden :)

Das hatte ja einen ziemlichen Effekt.
Bisher hatten wir nur 321 Ergebnisse und gleichzeitig ist die Zeitfolge nicht mehr richtig und der Umsatz ist signifikant gestiegen (vorher waren z.b. 1,50€ Umsatz jetzt ca. 30€).



upload_2015-6-22_10-13-35.png
 
Ich hab jetzt mal noch nach Standorten sortier und sieha da, es sieht gut aus, die Strukturierung ist zwar etwas wild (er zählt 1, 10, 11 ... , 2, 20) aber das ist ja im grunde logisch und nur formatierung.
eine kleine kuriosität ist noch der SB 23, ich vermute das bei dem die Kasse 2 falsch angelegt wurde und sich jemand verschrieben hat, was den SB Markt 23, erschafft der natürlich nur minimalen Umsatz produziert. (Bild siehe unten)
Das mit der Zeitfolge hat sich auch erledigt und fällt unter das Problem vor der Tastatur: ich hab das ORDER BY nicht geschrieben...:oops:
Ich überprüfe jetzt mal ob die Werte so stimmen oder ob es da noch ein Problem gibt.

Code:
SELECT    t.Datum,
        t.Schicht,
        t.Standort,
        sum(t.UmsatzSB1) AS UmsatzSB1

FROM    (

SELECT    left(StationName,patindex('%[0-9]%',StationName)+charindex(' ',right(StationName,len(StationName)-patindex('%[0-9]%',StationName)))-1) AS Standort,
--        Umsätze ab 22.00 Uhr werden der Nachtschicht des nächsten Tages zugerechnet
        (    CASE
            WHEN    datepart(hh,[Date]) BETWEEN 22 AND 23
            THEN    dateadd(day,1,cast([Date] AS DATE))
            ELSE    cast([Date] AS DATE)
            END ) AS Datum,
        (    CASE
            WHEN    datepart(hh,[Date]) BETWEEN 22 AND 23
            OR        datepart(hh,[Date]) BETWEEN 0 AND 5
            THEN    'Nacht'
            WHEN    datepart(hh,[Date]) BETWEEN 6 AND 13
            THEN    'Früh'
            WHEN    datepart(hh,[Date]) BETWEEN 14 AND 21
            THEN    'Spät'
            ELSE    'Fehler/Zeit'
            END ) AS Schicht,
        Salesbezeichnung AS UmsatzSB1
FROM    "Datenbankname"."dbo"."FirmaSales"
WHERE    datepart(year,[Date]) = 2015
AND        StationName LIKE 'SB [0-9]% %'

        ) t

GROUP BY t.Datum,t.Schicht,t.Standort
ORDER BY t.Datum,t. Standort,t.Schicht
 
Du könntest theoretisch sowohl das , in der Abfrage raus editieren als auch doppelte Leerschritte (Beitrag #24 zeigt welche) als auch die Zahl als solche für Reihenfolge nutzen. Das wird aber noch unübersichtlicher, hier wäre tatsächlich eine Anpassung der Tabelle bedeutend schöner.

Vor allem kann die Funktion durch neue Schreibweisen in einen Fehler laufen und deine ganze Abfrage dadurch nicht mehr laufen. Auch können Umsätze fehlen.
 
Ja, da sehe ich wie gesagt auch nicht das große Problem.
Solange der Rest funktioniert (und das sieht gut aus) wär die Formatierung zweitrangig.

Auf die Datenbank an sich hab ich leider keinen Einfluss, sprich sie ist weder von mir erstellt noch darf ich Änderungen durchfüren. Somit muss ich leider auf mit jegwelchen vorarbeiten Leben.
 
Werbung:
Zumindest die Namen der Märkte und Kassen könnte man eventuell selbst konfigurieren und einen Standard festlegen wie der auszusehen hat.
 
Zurück
Oben