これは、次のような自然なクエリ処理順序が原因で発生します。
-
FROM オンコード>-
OUTER 場所-
GROUP BY -
CUBE|ROLLUP -
HAVING -
SELECT -
DISTINCT -
ORDER BY -
TOP
SELECTでエイリアスを割り当てています 声明。ご覧のとおり、 WHERE SELECTの前に処理されます およびORDERBY その後に来る。それが理由です。回避策は何ですか:
- サブクエリ。ただし、読みにくい場合があります。
-
CROSS APPLY。これは美化する必要があります コードを少し使用することをお勧めします。
CROSS APPLY WHEREの前にエイリアスを割り当てます ステートメント、その中で使用できるようにします。
SELECT [Hotel Id]
, latitude
, longitude
, establishmentname
, Distance
FROM [dbo].[RPT_hotels]
CROSS APPLY (
SELECT 6371 * ACos(Cos(RADIANS(Latitude)) * Cos(RADIANS('50.017466977673905')) * Cos(RADIANS('24.69924272460935') - RADIANS(Longitude)) + Sin(RADIANS(Latitude)) * Sin(RADIANS('50.017466977673905')))
) AS T(Distance)
WHERE distance < 30
ORDER BY Distance;
詳細を知りたい場合。この質問を読んでください:このSQLステートメントの実行順序は何ですか