शुरू करने के लिए, यदि हम पूर्ण त्रुटि देते हैं, तो इसे पढ़ना चाहिए "प्रत्येक समूह द्वारा अभिव्यक्ति में कम से कम एक कॉलम होना चाहिए जो बाहरी संदर्भ नहीं है। "
त्रुटि को समझने के लिए, हमें यह स्पष्ट करना होगा कि 'बाहरी संदर्भ' . का क्या अर्थ है?
(नोट:इस मामले में इसका आंतरिक या बाहरी जुड़ाव से कोई लेना-देना नहीं है)
आंतरिक और बाहरी मुख्य क्वेरी और उसके उपश्रेणियों के संदर्भ में हैं। इस मामले में EXISTS
सबक्वेरी है और यह एक सहसंबंधित . है सबक्वेरी क्योंकि इसमें #header.header
. का बाहरी संदर्भ है , जो बाहरी तालिका को संदर्भित कर रहा है #header
, जबकि #detail
. का कोई भी संदर्भ आंतरिक संदर्भ के रूप में माना जाएगा।
तो संक्षेप में, क्योंकि CASE
एक सहसंबद्ध सबक्वेरी का उपयोग करता है जो बाहरी क्वेरी को संदर्भित करता है, फिर यह त्रुटि स्थिति को सक्रिय करता है, क्योंकि यह त्रुटि संदेश तब प्रकट होता है जब आप ग्रुप बाय क्लॉज में केवल अभिव्यक्तियों का उपयोग करने का प्रयास करते हैं जिन्हें बाहरी संदर्भ के रूप में व्याख्या किया जाता है।
उपप्रश्न कर सकते हैं GROUP BY में उपयोग किया जा सकता है, लेकिन सहसंबद्ध उपश्रेणियों में नहीं।
भ्रामक रूप से, वही त्रुटि एक गैर-सबक्वायर्ड, सरल क्वेरी जैसे कि
. द्वारा उत्पन्न की जा सकती हैselect
case when header=1 then 1
else 0
end headeris1,
'constant'
from #header
group by case when header=1 then 1 else 0 end , 'constant'
या यहां तक कि एक @variable
. के साथ स्थिरांक की जगह
कीचड़ की तरह साफ?
केव