使用HAVING with赋值变量查找有错误的SQL语法
我正在寻找在以下语句中使用的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
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