SQL创建三列遇语法错误:JOIN语句附近报错,求解决方案
修正后的SQL语句及说明
原语句的问题主要是JOIN语法顺序错误,以及缺少表关联条件,以下是修正后的写法:
方法一:先聚合再关联
SELECT sp.BusinessEntityID, sqh.AveQuota, (sp.CommissionPct * sp.SalesYTD) AS PctComm FROM sales.SalesPerson sp JOIN ( SELECT BusinessEntityID, AVG(SalesQuota) AS AveQuota FROM [sales].[SalesPersonQuotaHistory] GROUP BY BusinessEntityID ) sqh ON sp.BusinessEntityID = sqh.BusinessEntityID
方法二:使用CTE(公共表表达式)
WITH SalesQuotaAvg AS ( SELECT BusinessEntityID, AVG(SalesQuota) AS AveQuota FROM [sales].[SalesPersonQuotaHistory] GROUP BY BusinessEntityID ) SELECT sp.BusinessEntityID, sqa.AveQuota, (sp.CommissionPct * sp.SalesYTD) AS PctComm FROM sales.SalesPerson sp JOIN SalesQuotaAvg sqa ON sp.BusinessEntityID = sqa.BusinessEntityID
关键修正点:
- 调整语法顺序:把聚合逻辑放在子查询/CTE中提前计算,再和主表做关联,符合SQL语法执行顺序
- 给子查询/CTE设置别名,方便关联时引用字段
- 通过
BusinessEntityID建立两个表的关联关系,这是两个表的唯一关联字段 - 直接在主查询中计算年度至今佣金收入,和聚合后的平均配额字段一起输出
内容的提问来源于stack exchange,提问作者JC Gibbs
相关产品推荐
相关产品推荐

