Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

सबक्वेरी का उपयोग करते हुए समूहीकृत करते समय SQL सर्वर 2005 त्रुटि

शुरू करने के लिए, यदि हम पूर्ण त्रुटि देते हैं, तो इसे पढ़ना चाहिए "प्रत्येक समूह द्वारा अभिव्यक्ति में कम से कम एक कॉलम होना चाहिए जो बाहरी संदर्भ नहीं है। "

त्रुटि को समझने के लिए, हमें यह स्पष्ट करना होगा कि 'बाहरी संदर्भ' . का क्या अर्थ है?

(नोट:इस मामले में इसका आंतरिक या बाहरी जुड़ाव से कोई लेना-देना नहीं है)

आंतरिक और बाहरी मुख्य क्वेरी और उसके उपश्रेणियों के संदर्भ में हैं। इस मामले में 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 . के साथ स्थिरांक की जगह

कीचड़ की तरह साफ?

केव



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं अपने SQL सर्वर डेटाबेस स्कीमा को कैसे अपडेट कर सकता हूं?

  2. Sql Server 2008 में गतिरोध समस्या निवारण

  3. SQL Server 2008 R2 में कुशल पेजिनेशन

  4. SQL सर्वर मॉनिटरिंग को स्वचालित करने के लिए PowerShell और SQL डायग्नोस्टिक मैनेजर को मिलाएं

  5. SQL सर्वर गतिरोध आरेख को समझना