在尝试对多个内部联接进行分组时,我一直收到以下错误。
消息8120,级别16,状态1,行1列'address.Address1'是 在选择列表中无效,因为它不包含在任何一个中 聚合函数或GROUP BY子句。
以下是我的代码,无法弄清楚我做错了什么。
select Ad.Address1, Ad.Address2, Ad.PostalCode, Tw.Town, Co.County, CI.InstallationName,C.CompanyName
FROM address as AD
Inner Join
(Select TownId, Town From
Town as Tw)TW
ON Tw.TownID=Ad.TownID
Inner Join
(select County, CountyID From
County as CO) CO
ON CO.countyid=Ad.CountyID
Inner Join
(select ClientID, InstallationName, AddressID From
ClientInstallations as CI) CI
ON CI.AddressID=Ad.AddressID
Inner Join
(select ClientID, CompanyName From
Client as C) C
ON C.ClientID=CI.ClientID
Where Address1 <> '' and Address2 <> '' and PostalCode <> '' and Town <> '' and County is not null
Group By CompanyName
为凌乱的代码道歉,刚开始学习这些东西,所以会很感激一些提示。
非常感谢 萨姆
答案 0 :(得分:1)
你做错了什么,正在为mysql
使用sql server
类似的脚本。在sql server(以及其他每个理智的DBMS)中,每个选定的属性(不在聚合函数中)必须位于group by
中。在您的情况下,我根本不理解您使用group by
的原因,因为您不使用聚合函数。因此,您的解决方案应该是删除group by
。
根据评论进行修改
如果您只想计算每个companyname
的记录,则应select companyname, count(1) cnt from (your selection) group by companyname
。如果您还想要其他属性,则必须将它们包含在group by
中。
答案 1 :(得分:0)
查看您要从数据库中提取的内容列表(第一个&#39;选择&#39;后面的字段):
select Ad.Address1, Ad.Address2, Ad.PostalCode, Tw.Town, Co.County, CI.InstallationName,C.CompanyName
然而,在完成所有联接后,您按
进行分组Group By CompanyName
您的错误消息实际上只是遇到的第一个错误。你对Ad.Address2然后是Ad.PostalCode然后Tw.Town等获得相同的响应...如果省略第一个字段,则为Co.County,CI.InstallationName
规则是 - 如果选择字段列表,则每个字段应该在group by子句中或以某种方式聚合。
它确实有意义 - 如果你不聚合(即 - 将多个值转换成一个 - sum(..), count(..), min(..)
等),那么这个字段有许多可能的值。要么使每个组合成为一个新行(按组分组),要么选择一种合适的方法从可能的多个组中获取单个值
答案 2 :(得分:0)
我从您的评论中理解的是您想要的是存在多少同一公司名称的记录。如果是这种情况,那么您可以将查询重写为:
select COUNT(*),
C.CompanyName
FROM [address] as AD
Inner Join
(Select TownId, Town FROM Town as Tw)TW
ON Tw.TownID=Ad.TownID
Inner Join
(select County, CountyID FROM County as CO) CO
ON CO.countyid=Ad.CountyID
Inner Join
(select ClientID, InstallationName, AddressID From
ClientInstallations as CI) CI
ON CI.AddressID=Ad.AddressID
Inner Join
(select ClientID, CompanyName FROM
Client as C) C
ON C.ClientID=CI.ClientID
Where Address1 <> '' and Address2 <> '' and PostalCode <> '' and Town <> '' and County is not null
Group By CompanyName