【发布时间】:2016-08-16 19:16:43
【问题描述】:
我有一个SALES_RECEIPT 表和一个(销售)RETURNS 表,它们都将REP_ID 作为SALES_REP 表的外键。我想将每个销售代表的总销售额和总回报相加,并计算销售佣金和退货佣金损失。
查询运行没有错误,但列中的值不正确。这些值比实际值要大得多。我尝试了 INNER JOIN 和 LEFT JOIN 来链接 RETURNS 表,但这并没有解决问题。
SELECT Format(SALES_RECEIPT.SALE_DATE,'yyyy-mm') AS [Year-Month],
SALES_REP.rep_Name,
Sum(SALES_RECEIPT.SELLING_PRICE*SALES_RECEIPT.quantity) AS [Total Sales],
Sum((Nz(SALES_RECEIPT.SELLING_PRICE,0)*Nz(SALES_RECEIPT.quantity,0))*(Nz(SALES_RECEIPT.commission_percent,100)*0.001)) AS [Gross Commission],
Sum(Nz(returns.selling_price * returns.quantity)) AS [Returns Sales],
Sum(Nz(returns.selling_price*returns.quantity)) AS [Returns Sales], Sum((Nz(RETURNS.SELLING_PRICE,0)*Nz(RETURNS.quantity,0))*(Nz(RETURNS.commission_percent,100)*0.001)) AS [Lost Commission],
Sum((Nz(SALES_RECEIPT.SELLING_PRICE,0)*Nz(SALES_RECEIPT.quantity,0))*(Nz(SALES_RECEIPT.commission_percent,100)*0.001))-Sum((Nz(RETURNS.SELLING_PRICE,0)*Nz(RETURNS.quantity,0))*(Nz(RETURNS.commission_percent,100)*0.001)) AS [Net Commission]
FROM
(SALES_RECEIPT INNER JOIN SALES_REP ON SALES_RECEIPT.REP_ID = SALES_REP.REP_ID)
LEFT JOIN RETURNS ON SALES_RECEIPT.REP_ID = RETURNS.REP_ID
WHERE (((SALES_RECEIPT.SALE_DATE) Between #1/1/2000# And #12/31/2050#))
GROUP BY Format(SALES_RECEIPT.SALE_DATE,'yyyy-mm'), SALES_REP.rep_Name;
【问题讨论】:
-
通过汇总某些销售的返回值来调试它:
SELEcT Sum(Nz(returns.selling_price*returns.quantity)) AS [Returns Sales] FROM RETURNS WHERE REP_ID IN (put some sales IDs here) GROUP BY REP_ID并检查返回的数字是否正确 -
以下代码具有正确的“退货销售”值,但如何在同一个查询中执行所有操作是困难的部分。 SELECT Format(returns.return_DATE,'yyyy-mm') AS [Year-Month], SALES_REP.rep_Name AS [Sales Person], Sum(Nz(returns. sell_price*returns.quantity)) AS [Returns Sales] FROM RETURNS INNER加入 SALES_REP ON RETURNS.REP_ID = SALES_REP.REP_ID WHERE RETURNS.RETURN_DATE 介于 #1/1/2000# 和 #12/31/2050# GROUP BY 格式(RETURNS.RETURN_DATE,'yyyy-mm'),SALES_REP.rep_Name;
-
对不起...不是访问大师...看起来您还需要在选择结束时使用分号。我上次编辑过它。让我知道它是如何工作的。
-
最新编辑的代码仍然会导致 Access 出现错误。看起来您在查询中有 2 个子查询来对 2 个表进行汇总。然后在查询的主要部分中选择子查询的结果。 Access 中子查询的语法必须与 SQL Server 的语法略有不同,这就是导致错误的原因。
标签: sql ms-access ms-access-2010 left-join aggregate-functions