K tomu dochází z důvodu přirozeného pořadí zpracování dotazů, které je následující:
FROM
ON
OUTER
WHERE
GROUP BY
CUBE
|ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
Svůj alias přiřazujete v SELECT
tvrzení. Jak můžete vidět WHERE
je zpracován před SELECT
a ORDER BY
přijde po něm. To je ten důvod. Jaká jsou nyní řešení:
- Poddotazy. Ale mohou být těžko čitelné.
CROSS APPLY
. To by mělo zkrášlit váš kód trochu a je doporučená metoda.
CROSS APPLY
přiřadí alias před WHERE
prohlášení, takže je v něm použitelný.
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;
Pokud chcete zjistit více. Přečtěte si prosím tuto otázku: Jaké je pořadí provádění tohoto příkazu SQL