2017-01-17 3 views
0

Ich habe Schwierigkeiten, eine Spalte für YTD-Verkäufe hinzuzufügen (vom 1. Januar 2017 bis zum letzten Sonntag). Ich habe zwei Spalten gemacht, die den Angestellten ihre wöchentlichen Verkäufe bieten (die Woche endet jeden Sonntag und das ist der Grund, warum ich die date_trunc Funktion verwende, so dass es nicht notwendig ist, das Datum jede Woche rein und raus zu ändern). Der Grund, warum ich Coalesce verwende, liegt daran, dass die Mitarbeiter nicht jede Woche einen Umsatz machen, daher muss ich neben ihren Namen eine Null anzeigen (ich bekomme die Liste aller Mitarbeiter aus der Employees-Tabelle). Das Problem mit meiner aktuellen Syntax ist, dass das YTD nur die Ergebnisse aus der Spalte This Week emuliert. Wie kann ich die YTD-Spalte in meine Syntax einfügen? Ich würde jede Hilfe schätzen.Jährliche Verkäufe anzeigen

select coalesce(Employees,'Total') as "Employees", "This Week", "YTD" 

from 
(select t2.Employees,coalesce(sum(t1.Sales),0) "This Week", coalesce(sum (t1.Sales),0) "YTD" 
    from Employees t2 
    left join Sales t1 ON Employees = Employees 
    and "Week" = date_trunc('week', now())::date - 1 
    group by rollup(t2.Employees)) Z 

Mein Ergebnis aus dem obigen Auszug:

Employees      This Week     YTD 
Derek Jeter      0       0 
Barry Bonds      3       3 
Luis Gonzalez      6       6  
Mike Piazza      10       10 
Jason Witten      0       0 
Lebron James      7       7 
Daryl Wade       5       5 
Eli Manning      11       11 
Total        42       42 

Antwort

1

UPDATE - von Kommentaren Ihnen nur den „Woche“ Wert haben und nicht ein genaues Verkaufsdatum, so meinen ursprünglichen Code für nur suchen "aktuelles Jahr" wird nicht funktionieren. Aktualisiert Optionen vorschlagen für den Umgang mit diesem


Wie es aussieht Sie darunter nur die Daten der aktuellen Woche in Ihrem zugrunde liegenden Ergebnismenge; das wird nicht funktionieren. Sie müssen den Ergebnissatz verwenden, um alle Daten einzuschließen, die in den endgültigen Ausgaben verwendet werden, und dann jeden Ausgang entsprechend filtern.

Mein Verständnis ist, dass Ihre Daten nur die Verkäufe zu einer Woche - nicht zu einem bestimmten Tag - zuordnen, so dass Sie eine Auswahl treffen müssen, welche Woche die erste enthalten sollte. Für 2017, da das Jahr an einem Sonntag begann, ist dies möglicherweise kein Problem. Im Allgemeinen müssen Sie jedoch entscheiden, ob der Umsatz von einer Woche aus gezählt wird, die im vorherigen Jahr beginnt, aber im aktuellen Jahr endet.

sie auszuschließen Sie nur

tun konnte
select coalesce(t2.Employees, 'Total') as "Employees" 
    , coalesce(sum(case when "Week" = date_trunc('week', now())::date - 1 
         then t1.Sales 
        end),0) "This Week" 
    , coalesce(sum(t1.Sales),0) "YTD" 
    from   Employees t2 
     left join Sales t1 
       ON Employees = Employees 
      and "Week" <= date_trunc('week', now())::date - 1 
      and "Week" >= date_trunc('year', 'now())::date 
group by rollup(t2.Employees) 

Um sie schließen Ich denke, man dieses

@ Mark
select coalesce(t2.Employees, 'Total') as "Employees" 
    , coalesce(sum(case when "Week" = date_trunc('week', now())::date - 1 
         then t1.Sales 
        end),0) "This Week" 
    , coalesce(sum(t1.Sales),0) "YTD" 
    from   Employees t2 
     left join Sales t1 
       ON Employees = Employees 
      and "Week" <= date_trunc('week', now())::date - 1 
      and "Week" >= date_trunc('week', 
             date_trunc('year', 'now())::date) 
group by rollup(t2.Employees) 
+0

Dank tun konnte, Spalte meine aktuelle Datum ist Week. Soll ich die Funktion date_trunc für beide nur durch "Woche"> = 01.01.2017 <= 31.12.2017 ersetzen? Was denken Sie? Ich schätze es, dass Sie mir hier helfen. –

+1

Wird mit Notizen auf Ihre Optionen hier aktualisiert –

+0

Funktioniert wie ein Leckerbissen Mark, dies kann für zukünftige Starttermine arbeiten, danke nochmal !!! –

Verwandte Themen