2016-04-22 13 views
-1

Ich möchte die folgende Abfrage so ändern, dass sie die monatlichen Verkäufe für jeden Verkäufer und nicht nur für einen Verkäufer zusammenfasst. Ich glaube, es erfordert eine VB-Schleife, die String-Werte durchlaufen kann, aber ich weiß VB nicht, also wenn Sie detaillierte Informationen bereitstellen könnten, würde ich es begrüßen.Monatliche Aggregatberechnungen und Durchlaufen von Zeichenfolgenwerten

SELECT Format(DatePart("m",months.month_start),"00") & "/" & Year(months.month_start) AS [Month/Year], 

(Select sales_rep.rep_name FROM SALES_REP 
WHERE SALES_REP.rep_Name = "Eileen") AS [Sales Person], 

(select Round(Nz(Sum(sales_receipt.SELLING_PRICE * sales_receipt.quantity),0) ,2) 
FROM SALES_RECEIPT INNER JOIN SALES_REP ON SALES_REP.REP_ID = SALES_RECEIPT.REP_ID 
WHERE SALES_RECEIPT.[SALE_DATE] between months.month_start and months.month_end and SALES_REP.rep_Name = "Eileen") AS [Total Sales], 

(SELECT Round((Sum(((Nz(SALES_RECEIPT.SELLING_PRICE,0)*Nz(sales_receipt.quantity,0))*(Nz(sales_receipt.commission_percent,100)*0.001)))),2) 
FROM SALES_RECEIPT INNER JOIN SALES_REP ON SALES_REP.REP_ID = SALES_RECEIPT.REP_ID 
WHERE SALES_RECEIPT.[SALE_DATE] between months.month_start and months.month_end and SALES_REP.rep_Name = "Eileen") AS [Gross Commission] 

FROM 
(SELECT DateSerial(Year(sale_date), Month(sale_date), 1) AS month_start, DateAdd("d", -1, 
DateSerial(Year(sale_date), Month(sale_date) + 1, 1)) AS month_end FROM SALES_RECEIPT WHERE sale_date between #1/1/2015# And #12/31/2050# 
GROUP BY Year(sale_date), Month(sale_date)) AS months; 
+0

Ihre Antwort auf meine Buchung oben funktioniert super !! Ich danke dir sehr. –

+0

@HansUp. Bitte posten Sie den Kommentar als Antwort, damit OP akzeptieren und auflösen kann. – Parfait

+0

Auch beim OP waren Ihre letzten 6 Fragen fast gleich. Während wir Ihre Teilnahme begrüßen, versuchen Sie bitte, SQL, Unterabfragen und Aggregation zu lernen. Viele Online-Tutorials sind verfügbar. Lassen Sie uns SO reich an Strenge und Vielfalt sein. – Parfait

Antwort

0

Eine relativ einfache GROUP BY Abfrage anstelle eines mit all diesen Unterabfragen, sollte es auch die Logik arbeiten, und würde wahrscheinlich bieten eine bessere Leistung zur Laufzeit zu erleichtern. Ich sehe keinen Grund, warum Sie VBA dafür benötigen sollten.

SELECT 
    Format(SALES_RECEIPT.SALE_DATE, 'yyyy-mm') AS [Year-Month], 
    SALES_REP.rep_Name, 
    Sum(SALES_RECEIPT.SELLING_PRICE * SALES_RECEIPT.quantity), 
    Sum((Nz(SALES_RECEIPT.SELLING_PRICE,0) * Nz(SALES_RECEIPT.quantity,0)) 
     * (Nz(SALES_RECEIPT.commission_percent, 100) * 0.001)) 
FROM 
    SALES_RECEIPT 
    INNER JOIN SALES_REP 
    ON SALES_REP.REP_ID = SALES_RECEIPT.REP_ID 
WHERE SALES_RECEIPT.SALE_DATE BETWEEN #2015-1-1# AND #2050-12-31# 
GROUP BY 
    Format(SALES_RECEIPT.SALE_DATE, 'yyyy-mm'), 
    SALES_REP.rep_Name; 
+0

Es funktioniert gut, danke. –

Verwandte Themen