我有一个SALES RECEIPT表和一个RETURNS表。两个表中的信息彼此独立,但每个表都具有SALES_REP表中的Rep_ID属性。访问子查询和聚合计算
在第一个子查询中,我按月为每个销售人员计算SALES RECEIPT表中“总销售额”和“总佣金”之和。
在第二个子查询中,我按月为每个销售人员计算RETURNS表中的“退货销售”和“失业佣金”之和。
在主要查询中,我想每个月向每个销售人员显示“总销售额”, “总佣金”,“退货销售额”,“佣金损失”和“净佣金”。 “净委员会”是“总委员会”减去“失业委员会”。
随着我的代码,我得到错误信息:“Microsoft Access数据库引擎找不到输入表或查询‘totSales’确保它存在并且其名称拼写正确。”
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;
下面的查询返回月度销售佣金数据,但只有一个销售人员,我想上面的查询返回完全相同的结果下面的查询,但对所有销售人员的不只是一个销售人员。
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;
您在Round(TotCommissions - TotLostCommissions,2)AS [Net Commission]后选择的列是括号中的select语句,它返回多个字段。这在SQL中是不允许的。 您将此列命名为'totSales',但在外部语句的FROM子句中,您将其引用为表格 - 它不是。你想要什么这个查询返回? – Leviathan
我发布了查询的代码,该查询仅返回一个销售人员的月度佣金数据。我希望新查询返回所有销售人员的相同信息。 –