当我尝试在SQL Server 2005中执行以下代码时,我收到错误
列名称DistanceFromAddress无效
码:
select
SQRT(POWER(cast(Program_Latitude as float) - cast('41.5126237' as float), 2) +
POWER(cast(Program_Longitude as float) - cast('-81.6516411' as float), 2)) * 62.1371192 AS DistanceFromAddress
from
tblProgram
where
DistanceFromAddress < 2
Run Code Online (Sandbox Code Playgroud)
我正在使用select语句正确获取值,但是当我尝试检查条件时,where DistanceFromAddress < 2我收到错误.
我该如何解决这个问题?
Ste*_*lfe 41
您不能在WHERE子句中使用别名列.您可以尝试使用派生表.也许是这样的(对不起,未经测试):
SELECT * FROM
(SELECT SQRT(POWER(cast(Program_Latitude as float) - cast('41.5126237' as float), 2) +
POWER(cast(Program_Longitude as float) - cast('-81.6516411' as float), 2)) * 62.1371192
AS DistanceFromAddress from tblProgram) mytable
WHERE DistanceFromAddress < 2
Run Code Online (Sandbox Code Playgroud)
Dam*_*ver 30
该WHERE子句在子句(*)之前处理SELECT,因此别名不可用.转到使用子查询或CTE - 这是一个CTE:
; with Distances as (
select SQRT(POWER(cast(Program_Latitude as float) - cast('41.5126237' as float), 2) +
POWER(cast(Program_Longitude as float) - cast('-81.6516411' as float), 2)) * 62.1371192
AS DistanceFromAddress
from tblProgram
)
select * from Distances where DistanceFromAddress < 2
Run Code Online (Sandbox Code Playgroud)
(*) - 好吧,只要结果"好像"SQL语句按某个逻辑顺序处理,系统就可以自由地重新排序操作.当然,在SQL Server 出现问题的地方,由于SELECT条款应该消除的行/值的子句中的转换问题,它会产生错误WHERE.