【问题标题】:Having/Where clause not working for Haversine Formula using Microsoft SQLHave/Where 子句不适用于使用 Microsoft SQL 的 Haversine 公式
【发布时间】:2015-07-03 16:37:49
【问题描述】:

这是我的名为“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 进行查询。任何帮助将不胜感激。

【问题讨论】:

标签: sql sql-server haversine


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您需要将查询放入子查询、视图或 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 是一种“临时视图”。它也是一种强大的工具,也可用于创建递归查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多