Having/Where 子句不适用于使用 Microsoft SQL 的 Haversine 公式
Having/Where clause not working for Haversine Formula using Microsoft SQL
这是我的 table 名为 "test" -
在此处查看快照 test
然后是我的行项目:这里 - rowitems
我用的是haversine公式,他是我的query
SELECT *, ( 3960 * acos( cos( radians( 33.650800 ) ) *
cos( radians( Latitude ) ) * cos( radians( Longitude ) - radians( -117.891729 ) ) +
sin( radians( 33.650800 ) ) * sin( radians( Latitude ) ) ) ) AS Distance
FROM test
由于某些原因,HAVING
或 WHERE
子句不适用于 Distance
。
适用于 Latitude
或 Longitude
。
但是当我尝试这样做时 WHERE Distance < 10 or HAVING Distance < 10
。它说 Distance is an invalid column name
.
我需要能够执行此操作,并使用 Distance
进行查询。任何帮助将不胜感激。
您不能在 where 或 having 子句中使用计算字段。创建视图或使用子查询
试试这个:
select * FROM (SELECT *, ( 3960 * acos( cos( radians( 33.650800 ) ) *
cos( radians( Latitude ) ) * cos( radians( Longitude ) - radians( -117.891729 ) ) +
sin( radians( 33.650800 ) ) * sin( radians( Latitude ) ) ) ) AS Distance
FROM test) as T WHERE T.Distance < 10
您需要将查询放入子查询、视图或 CTE(常见 table 表达式)。
这是您的 CTE 任务示例:
WITH cte_test (Name, Latitude, Longitude, Distance)
AS
(
SELECT Name, Latitude, Longitude,
3960 * acos(cos(radians(33.650800))
* cos(radians( Latitude ) )
* cos( radians( Longitude ) - radians( -117.891729 ) )
+ sin( radians( 33.650800 ) ) * sin( radians( Latitude ) ) ) )
AS Distance
FROM test
)
SELECT * from cte_test where Distance < 10 ;
CTE 是一种 "temporary view"。它也是一种强大的工具,也可用于创建递归查询。
这是我的 table 名为 "test" - 在此处查看快照 test
然后是我的行项目:这里 - rowitems
我用的是haversine公式,他是我的query
SELECT *, ( 3960 * acos( cos( radians( 33.650800 ) ) *
cos( radians( Latitude ) ) * cos( radians( Longitude ) - radians( -117.891729 ) ) +
sin( radians( 33.650800 ) ) * sin( radians( Latitude ) ) ) ) AS Distance
FROM test
由于某些原因,HAVING
或 WHERE
子句不适用于 Distance
。
适用于 Latitude
或 Longitude
。
但是当我尝试这样做时 WHERE Distance < 10 or HAVING Distance < 10
。它说 Distance is an invalid column name
.
我需要能够执行此操作,并使用 Distance
进行查询。任何帮助将不胜感激。
您不能在 where 或 having 子句中使用计算字段。创建视图或使用子查询
试试这个:
select * FROM (SELECT *, ( 3960 * acos( cos( radians( 33.650800 ) ) *
cos( radians( Latitude ) ) * cos( radians( Longitude ) - radians( -117.891729 ) ) +
sin( radians( 33.650800 ) ) * sin( radians( Latitude ) ) ) ) AS Distance
FROM test) as T WHERE T.Distance < 10
您需要将查询放入子查询、视图或 CTE(常见 table 表达式)。
这是您的 CTE 任务示例:
WITH cte_test (Name, Latitude, Longitude, Distance)
AS
(
SELECT Name, Latitude, Longitude,
3960 * acos(cos(radians(33.650800))
* cos(radians( Latitude ) )
* cos( radians( Longitude ) - radians( -117.891729 ) )
+ sin( radians( 33.650800 ) ) * sin( radians( Latitude ) ) ) )
AS Distance
FROM test
)
SELECT * from cte_test where Distance < 10 ;
CTE 是一种 "temporary view"。它也是一种强大的工具,也可用于创建递归查询。