使用HAVING with赋值变量查找有错误的SQL语法

使用HAVING with赋值变量查找有错误的SQL语法,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我正在寻找在以下语句中使用的SQL语法: DECLARE @ORIG_LAT AS FLOAT = 40.4882011413574; DECLARE @ORIG_LONG AS FLOAT = -80.1939010620117; DECLARE @DISTANCE AS INT; SELECT LATITUDE_DEG, LONGITUDE_DEG,SQRT( POWER(69.1 * (LATITUDE_DEG - @ORIG_LAT), 2) + POWER(6

我正在寻找在以下语句中使用的SQL语法:

DECLARE @ORIG_LAT AS FLOAT = 40.4882011413574; 
DECLARE @ORIG_LONG AS FLOAT = -80.1939010620117;
DECLARE @DISTANCE AS INT; 

SELECT LATITUDE_DEG, LONGITUDE_DEG,SQRT( 
    POWER(69.1 * (LATITUDE_DEG - @ORIG_LAT), 2) + 
    POWER(69.1 * (@ORIG_LONG - LONGITUDE_DEG) * COS(LATITUDE_DEG / 57.3), 2)) AS DISTANCE 
FROM NAVAIDS 
HAVING DISTANCE < 80 --error 
ORDER BY DISTANCE ASC; 
错误:

消息207,16级,状态1,第9行 无效的列名“距离”


可以,但是我不明白为什么它不喜欢有。在方向上有什么帮助吗?正如您所注意到的,它是SQL Server 2008 R2,不能直接使用别名列。最简单的解决方案是将您的语句包装在一个子select中,并在该子select上应用您的子句

SELECT  *
FROM    (
          SELECT  LATITUDE_DEG
                  , LONGITUDE_DEG
                  , SQRT(
                      POWER(69.1 * (LATITUDE_DEG - @ORIG_LAT), 2) +
                      POWER(69.1 * (@ORIG_LONG - LONGITUDE_DEG) * COS(LATITUDE_DEG / 57.3), 2)) AS DISTANCE
          FROM    NAVAIDS
        ) q          
WHERE DISTANCE < 80
ORDER BY 
        DISTANCE ASC; 

欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮{},以很好地格式化和语法突出显示,无需额外设置!如果您发布错误消息,请使用blockquotes``正确格式化错误消息。谢谢。我确实需要向其中添加一个GROUP BY来编译,因此最终结果是:
select *
from (
    SELECT LATITUDE_DEG, LONGITUDE_DEG, SQRT( 
        POWER(69.1 * (LATITUDE_DEG - @ORIG_LAT), 2) 
        POWER(69.1 * (@ORIG_LONG - LONGITUDE_DEG) * COS(LATITUDE_DEG / 57.3), 2)
    ) AS DISTANCE 
    FROM NAVAIDS 
) a 
WHERE DISTANCE < 80 
ORDER BY DISTANCE