如何在 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);