我有sql查询如下所示sql server说它们是HAVING中的错误,而ORDER bY是他们在HAVING和ORDER BY附近语法的任何错误,任何人都可以帮忙。
SELECT Id,
Name1,
ZipCode,
StreetName,
StreetNumber,
State1,
Lat,
Lng,
Keyword,
( 6371 * ACOS( COS( (12.925432/57.2958) ) * COS( (Lat/57.2958) ) * COS( ( Lng/57.2958 ) - (77.5940171/57.2958) ) + SIN( 12.925432/57.2958 ) * SIN( Lat/57.2958 ) ) ) AS distance
FROM Business_Details
HAVING (distance < 1.5) and (Keyword like '%plumber%')
ORDER BY distance ;
答案 0 :(得分:8)
在此使用where
代替having
。
having
可用于缩小总值的条件
where
对于缩小未汇总数据的条件非常有用。
<强>更新强>
SQL Server不是MySQL,它可以在一个...
这应该是你需要的
SELECT Id,
Name1,
ZipCode,
StreetName,
StreetNumber,
State1,
Lat,
Lng,
Keyword,
( 6371 * ACOS( COS( (12.925432/57.2958) ) * COS( (Lat/57.2958) ) * COS( ( Lng/57.2958 ) - (77.5940171/57.2958) ) + SIN( 12.925432/57.2958 ) * SIN( Lat/57.2958 ) ) ) AS distance
FROM Business_Details
where (Keyword like '%plumber%')
and ( 6371 * ACOS( COS( (12.925432/57.2958) ) * COS( (Lat/57.2958) ) * COS( ( Lng/57.2958 ) - (77.5940171/57.2958) ) + SIN( 12.925432/57.2958 ) * SIN( Lat/57.2958 ) ) ) < 1.5
ORDER BY ( 6371 * ACOS( COS( (12.925432/57.2958) ) * COS( (Lat/57.2958) ) * COS( ( Lng/57.2958 ) - (77.5940171/57.2958) ) + SIN( 12.925432/57.2958 ) * SIN( Lat/57.2958 ) ) ) ;
答案 1 :(得分:2)
每个人都已经提到HAVING用于聚合数据,例如SUM和MIN,你可以将这两个条件放在你的WHERE子句中。
对于它的价值(我现在无法测试)并希望解决您的实际问题,我的经验是您不能在HAVING子句中使用列别名,并且必须明确重写该列的等式而不是别名。
有关详细信息,请参阅this question。
答案 2 :(得分:2)
HAVING通常与GROUP BY语句一起使用。 HAVING就像结果组的WHERE一样。
答案 3 :(得分:1)
SELECT * from
(SELECT Id,
Name1,
ZipCode,
StreetName,
StreetNumber,
State1,
Lat,
Lng,
Keyword,
( 6371 * ACOS( COS( (12.925432/57.2958) ) * COS( (Lat/57.2958) ) * COS( ( Lng/57.2958 ) - (77.5940171/57.2958) ) + SIN( 12.925432/57.2958 ) * SIN( Lat/57.2958 ) ) ) AS distance
FROM Business_Details
)
WHERE (distance < 1.5) and (Keyword like '%plumber%')
ORDER BY distance ;