2017-05-22 4 views
0

Ich versuche, eine Methode zum Abrufen von Daten mithilfe einer Unterabfrage zu finden, bei der die wöchentliche Leistung sowie die jährlichen Leistungsergebnisse von customerid zurückgegeben werden. Wenn die folgende Anweisung verwendet wird, sind die Ergebnisse Gesamtverkäufe, im Gegensatz zu Verkäufen nach Kunden-ID (in jeder Zeile).Abfrage/Unterabfrage mit mehreren Datumsbereichen

Select CUSTOMERID, 
    SUM(Amount_Sales), 
    (Select SUM(Amount_Sales), 
    From SalesTable 
    Where SaleDate>='01/01/2017' 
    and SaleDate<='12/31/2017') 
From SalesTable 
Where SaleDate>='05/22/17' and SaleDate<='05/28/17' 
GROUP BY CUSTOMERID 
+0

Sie haben Gruppe zu verwenden, indem für CUSTOMERID – Blasanka

+0

@Blasanka Dank für die Heads-up – BIGTONE559

+0

in Zukunft halten Sie diese Dinge in Bitte beachten Sie bei der Veröffentlichung: 1) Fügen Sie ein Beispiel der Ausgabe, die Sie sehen, sowie Ihre gewünschte Ausgabe ein. 2) Bitte markieren Sie die Frage zu einer bestimmten Datenbank-Engine. 3) Fügen Sie die Antwort zu Ihrer Frage hinzu, wenn Sie herausfinden, ob es aus dem Kommentar einer anderen Person nicht klar ist. – spfursich

Antwort

1

Sie können dies in einer einzigen Aggregation mit bedingter Aggregation:

select customerid, 
    sum(amount_sales) as annual_sales, 
    sum(case when saledate >= '2017-05-22' 
       and saledate <= '2017-04-28' 
     then amount_sales else 0 end) as weekly_sales 
from salestable 
where saledate >= '2017-01-01' 
    and saledate <= '2017-12-31' 
group by customerid; 
+0

Die Daten der Wo-Klausel wurden im Gegensatz zu den wöchentlichen Daten auf das gesamte Jahr geändert. War das Absicht? Leistung bezogen? – BIGTONE559

+0

@ BIGTONE559 - Ich habe die Orte der Datumsfilter umgeschaltet. Da Ihre wöchentlich gefilterten Zeilen eine Teilmenge des gesamten Jahres darstellen, können Sie jährlich und * bedingt * wöchentlich aggregieren. – GurV

Verwandte Themen