/ Where子句不适用于使用Microsoft SQL的Haversine Formula

时间:2015-07-03 16:37:49

标签: sql sql-server haversine

这是我的名为" test" - 在此处查看快照 test

然后我的行项目:此处 - rowitems

我使用了半身式公式,他是我的查询

  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

由于某些原因,HAVINGWHERE子句不适用于Distance

适用于LatitudeLongitude

但是当我尝试做WHERE Distance < 10 or HAVING Distance < 10时。它说Distance is an invalid column name

我需要能够执行此操作,并使用Distance进行查询。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您不能在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

答案 1 :(得分:1)

您需要将查询放入子查询,视图或CTE(公用表表达式)。

以下是使用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是一种临时视图&#34;。它也是一种功能强大的工具,也可用于创建递归查询。