これは、次のような自然なクエリ処理順序が原因で発生します。
-
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ステートメントの実行順序は何ですか