select
SQRT(
POWER(cast(Program_Latitude as float) - cast('41.5126237' as float), 2) +
POWER(cast(Program_Longitude as float) - cast('-81.6516411' as float), 2)
) * 62.1371192 AS DistanceFromAddress
from tblProgram
having DistanceFromAddress < 2
काम कर सकता है (हालांकि मुझे लगता है कि, क्लॉज द्वारा समूह के बिना भी)।
समस्या यह है कि आप केवल where
खंड के अंदर चयनित तालिका (तालिका) के दायरे में नामों का उपयोग कर सकते हैं। Where
एक पूर्व फ़िल्टर है जो पंक्तियों को उनके चयन से पहले फ़िल्टर करता है, इसलिए फ़ील्ड परिभाषा में इस तरह के अभिव्यक्ति अभी तक निष्पादित नहीं हैं और उपनाम उपलब्ध नहीं हैं।
Having
क्लॉज समूह के बाद पोस्ट फ़िल्टर के रूप में काम करता है और क्वेरी से उपनाम का उपयोग कर सकता है, हालांकि मुझे डर है कि आपको वास्तविक group by
क्लॉज (सुनिश्चित नहीं) होना चाहिए।
विकल्प उप-चयन (व्युत्पन्न तालिका या चयन में चयन करें) है, जहां आप पहले प्रत्येक पंक्ति के लिए दूरी का चयन करते हैं, और फिर केवल उन परिणामों से प्रासंगिक दूरी का चयन करें। यह काम करेगा:
select d.DistanceFromAddress
from
(select
SQRT(
POWER(cast(Program_Latitude as float) - cast('41.5126237' as float), 2) +
POWER(cast(Program_Longitude as float) - cast('-81.6516411' as float), 2)
) * 62.1371192 AS DistanceFromAddress
from tblProgram) d
where d.DistanceFromAddress < 2
या आप अभिव्यक्ति दोहरा सकते हैं। यह आपकी क्वेरी को बनाए रखने के लिए कठिन बनाता है, लेकिन कुछ मामलों में यह आपके लिए काम कर सकता है। उदाहरण के लिए यदि आप वास्तविक दूरी वापस नहीं करना चाहेंगे, लेकिन केवल उस दूरी पर ब्याज के बिंदु का नाम कहें। उस स्थिति में, where
खंड में आपको केवल अभिव्यक्ति की आवश्यकता है, इस स्थिति में रखरखाव तर्क समाप्त हो गया है, और यह समाधान एक आदर्श विकल्प है।
select
tblProgram.POIname
/* Only if you need to return the actual value
, SQRT(
POWER(cast(Program_Latitude as float) - cast('41.5126237' as float), 2) +
POWER(cast(Program_Longitude as float) - cast('-81.6516411' as float), 2)
) * 62.1371192 AS DistanceFromAddress */
from tblProgram
where
-- Use this if you only want to filter by the value.
SQRT(
POWER(cast(Program_Latitude as float) - cast('41.5126237' as float), 2) +
POWER(cast(Program_Longitude as float) - cast('-81.6516411' as float), 2)
) * 62.1371192 < 2
संभावित डुप्लिकेट [WHERE क्लॉज में कॉलम उपनाम का जिक्र करते हुए] (https://stackoverflow.com/questions/8370114/referring-to-a-column-alias-in-a-where-clause) – Vadzim
I quess, सिर्फ अभिव्यक्ति को डुप्लिकेट करना 'WHERE' खंड यहां उत्तर में प्रस्तावित उपकुवेशियों की तुलना में बेहतर योजना प्रदान करेगा। – Vadzim