Ich habe eine Tabelle Verkaufstabelle und eine Tabelle RETURNS. Die Informationen in den beiden Tabellen sind voneinander unabhängig, mit der Ausnahme, dass jede Tabelle das Attribut "Rep_ID" aus der Tabelle "SALES_REP" enthält.ACCESS Sub-Abfragen und Aggregatberechnungen
In der ersten Unterabfrage errechne ich die Summe der "Gesamtverkäufe" und der "Bruttokommission" aus der Tabelle "SALES RECEIPT" für jeden Verkäufer auf monatlicher Basis.
In der zweiten Unterabfrage berechne ich die Summe der "Return Sales" und der "Lost Commission" aus der RETURNS-Tabelle für jeden Vertriebsmitarbeiter auf einer monatlichen Basis.
In der Hauptabfrage, ich möchte für jeden Vertriebsmitarbeiter auf einer monatlichen Basis die "Gesamtumsatz", "Brutto Kommission", "Return Sales", "verlorene Kommission" und "Net Commission" anzuzeigen. Die "Net Commission" ist die "Gross Commission" abzüglich der "Lost Commission".
Mit dem Code, den ich habe, erhalte ich die Fehlermeldung: „. Die Datenbank Microsoft Access-Modul die Eingabetabelle oder Abfrage‚totSales‘nicht finden Stellen Sie sicher, es existiert und dass der Name richtig geschrieben ist.“
Select
totSales.Year-Month as [Month/Year],
SALES_REP.rep_name as [Sales Person],
SUM(totSales.[Total Sales]) as [Total Sales],
SUM(totSales.[Gross Commission]) as [Gross Commission],
SUM(totReturns.[Return Sales],0) as [Sales Returns],
SUM(totReturns.[Lost Commission],0) as [Lost Commission],
Round([Gross Commission] - [Lost Commission],2) AS [Net Commission],
(SELECT
Format(SALES_RECEIPT.sale_date,'yyyy-mm') AS [Year-Month],
SALES_RECEIPT.rep_id,
(SALES_RECEIPT.selling_price * SALES_RECEIPT.quantity) AS [Total Sales],
((Nz(SALES_RECEIPT.selling_price, 0) * Nz(SALES_RECEIPT.quantity, 0)) * (Nz(SALES_RECEIPT.commission_percent, 100) * 0.001)) AS [Gross Commission]
FROM
SALES_RECEIPT
WHERE
SALES_RECEIPT.sale_date Between #1/1/2000# And #12/31/2050#) AS totSales,
(SELECT
RETURNS.rep_id,
(Nz(RETURNS.selling_price * RETURNS.quantity)) AS [Sales Returns],
((Nz(RETURNS.selling_price, 0) * Nz(RETURNS.quantity, 0)) * (Nz(RETURNS.commission_percent, 100) * 0.001)) AS [Lost Commission]
FROM
RETURNS
WHERE
RETURNS.return_date Between #1/1/2000# And #12/31/2050#) As totReturns
From (totSales
LEFT JOIN totReturns on totReturns.rep_id = totSales.rep_id)
INNER JOIN SALES_REP ON totSales.REP_ID = SALES_REP.rep_id
Group By totSales.Year-Month, totSales.rep_name;
die Abfrage unten liefert Daten monatliche Verkaufsprovision, sondern nur für einen Verkäufer. ich möchte die obige Abfrage exakt die gleichen Ergebnisse wie die Abfrage unten, sondern für alle Vertriebsmitarbeiter nicht nur ein Verkäufer zurück.
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_id = 1) 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_id = 1) 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_id = 1) AS [Gross Commission],
(SELECT Round(Nz(Sum(returns.selling_price * returns.quantity), 0),2)
FROM (returns inner JOIN inventory ON INVENTORY.INVENTORY_ID = returns.INVENTORY_ID)
LEFT JOIN SALES_REP ON SALES_REP.REP_ID = returns.REP_ID
WHERE returns.return_date between months.month_start and months.month_end AND SALES_REP.rep_id = 1) AS [Sales Returns],
(SELECT Round(Nz((Sum(((Nz(returns.SELLING_PRICE,0)*Nz(returns.quantity,0))*(Nz(returns.commission_percent,100)*0.001)))),0),2)
FROM (returns inner JOIN inventory ON INVENTORY.INVENTORY_ID = returns.INVENTORY_ID)
LEFT JOIN SALES_REP ON SALES_REP.REP_ID = returns.REP_ID
WHERE returns.return_date between months.month_start and months.month_end AND SALES_REP.rep_id = 1) AS [Lost Commission],
(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_id = 1) - (SELECT Round(Nz((Sum(((Nz(returns.SELLING_PRICE,0)*Nz(returns.quantity,0))*(Nz(returns.commission_percent,100)*0.001)))),0),2)
FROM(returns inner JOIN inventory ON INVENTORY.INVENTORY_ID = returns.INVENTORY_ID)
LEFT JOIN SALES_REP ON SALES_REP.REP_ID = returns.REP_ID
WHERE returns.return_date between months.month_start and months.month_end AND SALES_REP.rep_id = 1) AS [Net 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/2000# And #12/31/2100#
GROUP BY Year(sale_date), Month(sale_date)) AS months;
Die Spalte, die Sie nach 'Round (TotCommissions - TotLostCommissions, 2) AS [Net Commission] auswählen, ist eine Select-Anweisung in Klammern, die mehr als ein Feld zurückgibt. Dies ist in SQL nicht erlaubt. Sie haben diese Spalte 'totSales' benannt, aber in der FROM-Klausel der äußeren Anweisung verweisen Sie sie wie eine Tabelle - was nicht der Fall ist. Was genau soll diese Abfrage zurückgeben? – Leviathan
Ich habe Code für eine Abfrage veröffentlicht, die monatliche Provisionsdaten für nur einen Vertriebsmitarbeiter zurückgibt. Ich möchte, dass die neue Abfrage die gleichen Informationen zurückgibt, aber für alle Vertriebsmitarbeiter. –