假设我有一张公司表:
Company
coID | coName | coCSR
该coCSR
字段是与帐户处理程序表相关的数字 ID:
AccountHandler
ahID | ahFirstName | ahLastName
我还有一张订单表:
Order
orID | orCompanyID | orDate | orValue
现在我需要生成的输出结构如下:
Company | Account handler | No. of orders | Total of orders
这是我尝试过的查询,它会产生错误:
SELECT coID, coName, ahFirstName+' '+ahLastName AS CSRName, COUNT(orID) AS numOrders, SUM(orValue) AS totalRevenue
FROM Company
LEFT JOIN AccountHandler ON coCSR = ahID
LEFT JOIN Order ON coID = orCompanyID
WHERE coCSR = 8
AND orDate > getdate() - 365
ORDER BY coName ASC
错误是:列名 'AccountHandler.ahLastName' 在 ORDER BY 子句中无效,因为它不包含在聚合函数中并且没有 GROUP BY 子句。
如果我使用GROUP BY coID
,我会在关键字“WHERE”附近得到不正确的语法。如果由于聚合函数而将 更改为WHERE
,HAVING
则会收到错误消息,告诉我删除聚合函数或 GROUP BY 子句中不包含的每个其他列名。
我不得不承认,除了最基本的 SQL 命令,我还不懂任何东西的逻辑和语法,我只是想应用我以前见过的东西,但它不起作用。请帮助我完成这项工作。更好的是,你能帮我理解为什么它现在不起作用吗?:)