【发布时间】:2017-05-18 15:47:36
【问题描述】:
我想按服务名称对我的所有记录进行分组,并且我在 SQL Server 中使用此查询,但它会引发错误
select max(c.service_id) as service_id, a.ser_id, b.UserID,
SQRT(POWER(69.1 * ( @latitude - b.Latitude),2) + POWER(69.1 * ( b.Longitude - @longitude ) * COS(b.Longitude / 57.3), 2)) as distance,
c.service_name
from aspnet_bawe_services a
left join aspnet_user_account b on a.bawe_id = b.UserID
left join aspnet_services_app c on a.ser_id = c.service_id
group by c.service_name
错误
消息 8120,级别 16,状态 1,过程 app_service_list,第 24 行
列“aspnet_bawe_services.ser_id”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
【问题讨论】:
-
错误消息一目了然:您可以选择的唯一列是
service_name或包含在聚合函数(如MAX())中的其他列。而且由于您从未向我们展示示例输入和输出数据,因此只能猜测正确的查询。 -
请提供一个可以回答的问题。根据您提供的查询,不可能弄清楚您想要什么,因为它主要由非法 SQL 组成。
-
您有什么理由手动进行地理计算而不是使用对
geography的内置支持? -
简单规则:如果您使用
GROUP BY,那么您的语句中的每一列必须要么在GROUP BY子句,OR 它必须由聚合函数处理,如AVG、COUNT、MIN、MAX、SUM等。 -- EVERY 其中之一 - 没有例外
标签: c# sql sql-server database