select Accounts.name, Accounts.regno Accounts.model , Accounts.slacc, count (servicing.dt) as total
from Accounts l,eft
outer join servicing on Accounts.slacc = servicing.slacc
group by Accounts.slacc,Accounts.name
错误消息是
Major Error 0x80040E14, Minor Error 25515
> select Accounts.name,Accounts .model , Accounts.regno, Accounts.slacc, count (servicing.dt) as total from Accounts left outer join servicing on Accounts.slacc = servicing.slacc group by Accounts.slacc,Accounts.name
In aggregate and grouping expressions, the SELECT clause can contain only
aggregates and grouping expressions. [ Select clause = Accounts,model ]
答案 0 :(得分:1)
您的查询具有group by子句。如果在查询中使用group by子句,则select语句中的每一列都必须执行以下两项操作之一:要么必须是group by list的一部分,要么必须是某种类型的汇总(求和,计数,平均,最大值等)。如果不这样做,SQL将不知道如何处理该列。在您的情况下,在选择项中列出了Accounts.regno和Accounts.model,但它们不在group by子句中,并且它们也不是聚合的-因此会出现错误。
暂时假设您有两个帐户记录,它们具有相同的帐户名和slacc,但具有不同的Regno(或型号)。 group by子句表示必须将它们合并到一个记录中才能显示,但是您尚未告诉SQL如何做到这一点。数据是否如此并不重要,SQL首先会查找可能的错误。
在这种情况下,您可能只希望将所有详细信息分组。最简单的方法就是确保将所有需要的列添加到分组依据,像这样
select Accounts.name, Accounts.regno, Accounts.model, Accounts.slacc, count(servicing.dt) as total
from Accounts
left outer join servicing on Accounts.slacc = servicing.slacc
group by Accounts.slacc, Accounts.name, Accounts.regno, Accounts.model
这将解决错误,但会进行不必要的分组,如果您要从帐户中获得更多的列,则将变得非常麻烦,因为您必须将它们全部添加。处理该问题的另一种方法是使用最少数量的组查询列,然后将其结果与主查询连接以获取其他列。这可能看起来像这样
select Accounts.name, Accounts.regno, Accounts.model, Accounts.slacc, Totals.Total
from Accounts
left outer join
( Select slacc, count(dt) as total
from servicing
group by slacc
) Totals on Totals.slacc = Accounts.slacc