यह प्राकृतिक क्वेरी प्रोसेसिंग ऑर्डर के कारण होता है, जो निम्न है:
FROMONOUTERWHEREGROUP BYCUBE|ROLLUPHAVINGSELECTDISTINCTORDER BYTOP
आप SELECT . में अपना उपनाम निर्दिष्ट कर रहे हैं बयान। जैसा कि आप देख सकते हैं WHERE SELECT . से पहले प्रोसेस किया जाता है और ORDER BY उसके बाद आता है। यही कारण है। अब उपाय क्या हैं:
- उपश्रेणियाँ। लेकिन उन्हें पढ़ना मुश्किल हो सकता है।
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 कथन के निष्पादन का क्रम क्या है