如何在 SQL Server 2012 中避免或启用分组依据中的地理字段?
How to avoid or enable geography field in group by in SQL Server 2012?
如何计算 select 语句中给定点与数据库 users.GeoLocation 之间的距离。我需要 group by 子句(此查询已简化。)。但是 SQL 服务器正在抱怨:
类型"geography"不可比较。不能在GROUP BY子句中使用。
如果我将它从 group by 子句中删除,它也会抱怨。
该怎么办?以某种方式转换为另一种字段类型?
SELECT geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326).STDistance(users.GeoLocation) AS distanceKM,
users.ID
FROM users_Users AS users
GROUP BY users.ID,
users.GeoLocation
您可以只从分组中取出 GeoLocation 列,然后作为单独的(子)查询进行计算。例如:
DECLARE @fixedPoint GEOGRAPHY = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
WITH UserGrouping AS
(
SELECT
// Other Columns
users.ID
FROM
users_Users AS users
GROUP BY
users.ID
)
SELECT
UG.*,
users.GeoLocation.STDistance(@fixedPoint) AS distanceKM
FROM
UserGrouping AS UG
JOIN
users_Users AS users ON (UG.ID = users.ID);
如何计算 select 语句中给定点与数据库 users.GeoLocation 之间的距离。我需要 group by 子句(此查询已简化。)。但是 SQL 服务器正在抱怨:
类型"geography"不可比较。不能在GROUP BY子句中使用。
如果我将它从 group by 子句中删除,它也会抱怨。 该怎么办?以某种方式转换为另一种字段类型?
SELECT geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326).STDistance(users.GeoLocation) AS distanceKM,
users.ID
FROM users_Users AS users
GROUP BY users.ID,
users.GeoLocation
您可以只从分组中取出 GeoLocation 列,然后作为单独的(子)查询进行计算。例如:
DECLARE @fixedPoint GEOGRAPHY = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
WITH UserGrouping AS
(
SELECT
// Other Columns
users.ID
FROM
users_Users AS users
GROUP BY
users.ID
)
SELECT
UG.*,
users.GeoLocation.STDistance(@fixedPoint) AS distanceKM
FROM
UserGrouping AS UG
JOIN
users_Users AS users ON (UG.ID = users.ID);