5

मैं तीन टेबल में शामिल होना चाहता हूं और तालिका ए के योग (मात्रा) की गणना करने के लिए चाहता हूं मैंने कुछ कोशिश की और मुझे वांछित आउटपुट प्राप्त हुआ। लेकिन फिर भी मुझे कुल कार्य और समूह द्वारा खंड पर आधारित भ्रम है।जब हम जॉइन में कुल फ़ंक्शन का उपयोग करते हैं तो समूह द्वारा समूह का उपयोग कैसे करें?

दो या दो से अधिक तालिकाओं में शामिल होने से योग मूल्य की गणना करते समय, समूह द्वारा खंड में हमें उल्लेख करने के लिए कॉलम क्या हैं और हमें उन कॉलम देने की आवश्यकता क्यों है?

उदाहरण के लिए: यहां मेरी तालिका और वांछित क्वेरी है।

TableA: ItemID, JobOrderID, CustomerID, DivisionID, Quantity 
TableB: ItemID, ItemName, SpecificationID 
TableC: SpecificationID, SpecificationName 
TableD: DivisionID, DivisionName 
TableE: JobOrderID, JobOrderNo. 
TableF: CustomerID, CustomerName 

मैं ItemID, CustomerID, JobOrderID और DivisionID के आधार पर बीमा राशि (मात्रा) प्राप्त करना चाहते हैं।

मैंने निम्नलिखित प्रश्न लिखा और यह ठीक काम कर रहा है। लेकिन अगर मैं समूह द्वारा खंड में किसी भी कॉलम को हटा देता हूं, तो यह वांछित परिणाम नहीं देता है। क्यूं कर? समूह द्वारा खंड क्या करता है? कुल फ़ंक्शन का उपयोग करते समय समूह द्वारा क्लॉज को निर्दिष्ट कैसे करें? मेरी क्वेरी यहाँ है।

SELECT 
      B.ItemName + ' - ' + C.SpecificationName AS 'ItemName', 
      SUM(A.Quantity) AS 'Quantity', 
      A.ItemID, 
      D.DivisionName, 
      F.CustomerName, 
      E.JobOrderNo, 
      A.DivisionID, 
      A.JobOrderID, 
      A.CustomerID 

    FROM 
      TableA A 
      INNER JOIN TableB B ON B.ItemID = A.ItemID 
      INNER JOIN TableC C ON C.SpecificationID = B.SpecificationID 
      INNER JOIN TableD D ON D.DivisionID = A.DivisionID 
      LEFT JOIN TableE E ON E.JobOrderID = A.JobOrderID 
      LEFT JOIN TableF F ON F.CustomerID = A.CustomerID 
    WHERE 
      A.ItemID = @ItemID 
    GROUP BY 
      A.ItemID, 
      A.JobOrderID, 
      A.DivisionID, 
      A.CustomerID, 
      D.DivisionName, 
      F.CustomerName, 
      E.JobOrderNo, 
      B.ItemName, 
      C.SpecificationName 

कोई भी उदाहरण के रूप में इस पर विचार करके समूह द्वारा क्लॉज के बारे में सुझाव दें।

उत्तर

4

निर्दिष्ट स्तंभों में से किसी अद्वितीय संयोजन के लिए GROUP BY एकत्रीकरण (योग की तरह, न्यूनतम आदि) करता है। यदि आप GROUP BY क्लॉज में या समेकित फ़ंक्शन में कुछ कॉलम नाम निर्दिष्ट नहीं करते हैं तो यह SQL इंजन के लिए अज्ञात है जो मानता है कि इसे उस तरह के कॉलम के लिए वापस जाना चाहिए।

+0

इसलिए यदि हम कुछ कॉलम का चयन करते हैं, तो हमें समूह में उन स्तंभों को समूह में भी देना होगा। ऐसा है क्या? – thevan

+0

हां, चयनित कॉलम 'समूह द्वारा' या agreagtion में होना चाहिए जैसे: 'अधिकतम (कॉलम_नाम) चुनें' –

5

GROUP BY (Transact-SQL) SQL सर्वर 2008 R2 में एक या अधिक कॉलम या अभिव्यक्तियों के मानों द्वारा सारांश पंक्तियों के एक सेट में पंक्तियों का एक चयनित सेट समूह करता है। प्रत्येक समूह के लिए एक पंक्ति वापस कर दी जाती है। चयन खंड सूची में कुल कार्य व्यक्तिगत पंक्तियों के बजाय प्रत्येक समूह के बारे में जानकारी प्रदान करते हैं।

SELECT a.City, COUNT(bea.AddressID) AS EmployeeCount 
FROM Person.BusinessEntityAddress AS bea 
    INNER JOIN Person.Address AS a 
     ON bea.AddressID = a.AddressID 
GROUP BY a.City 

ग्रुप BY खंड एक आईएसओ अनुरूप वाक्य रचना और एक गैर आईएसओ अनुरूप वाक्य रचना है। केवल एक सिंटैक्स शैली का उपयोग एक SELECT कथन में किया जा सकता है। सभी नए कार्यों के लिए आईएसओ अनुपालन वाक्यविन्यास का प्रयोग करें। पिछड़ा संगतता के लिए गैर-आईएसओ अनुपालन वाक्यविन्यास प्रदान किया गया है।

आईएसओ अनुरूप वाक्य रचना में सूची में किसी भी nonaggregate अभिव्यक्ति में प्रत्येक तालिका या दृश्य स्तंभ GROUP BY सूची में शामिल किया जाना चाहिए।

select pub_id, type, avg(price), sum(total_sales) 
from titles 
group by pub_id, type 

Organizing query results into groups: the group by clause

Sybase या गैर आईएसओ अनुरूप वाक्य रचना की बात कर रहा है कि तुम क्या को शामिल करने या select सूची एक प्रश्न है कि group by शामिल की में छोड़ सकते हैं पर प्रतिबंध लिफ्टों:

  • चुनिंदा सूची में कॉलम समूह कॉलम तक सीमित नहीं हैं और वेक्टर समेकन के साथ उपयोग किए गए कॉलम तक सीमित नहीं हैं।

  • समूह द्वारा निर्दिष्ट कॉलम चयनित सूची में उन गैर-कुल कॉलम तक सीमित नहीं हैं।

उदाहरण:

select type, title_id, avg(price), avg(advance) 
from titles 
group by type 
+0

तो अगर हम चयन कुछ स्तंभ का मतलब है, हम खंड करके भी समूह में उन स्तंभों देने के लिए की जरूरत है। ऐसा है क्या? – thevan

+0

@thevan: मैंने अपना जवाब संपादित कर दिया है .. –

+0

यह समूह के लिए केवल एक प्रतिमानी पंक्ति दिखाकर समूह को बहुत अधिक समझ में आता है, इसलिए सभी गैर-समेकित फ़ील्ड को खंड में समूह में शामिल किया जाना चाहिए। –

2

समूह के बिना समेकित कार्यों जैसे कुल कार्यों का उपयोग करने के लिए, ओवर क्लॉज का उपयोग करें।

देखें: http://msdn.microsoft.com/en-us/library/ms189461.aspx

उदाहरण:

CREATE TABLE #a (ida int, name varchar(50)) 
CREATE TABLE #b (ida int, number int) 

INSERT INTO #a VALUES(1,'one') 
INSERT INTO #a VALUES(2,'two') 

INSERT INTO #b VALUES(1,2) 
INSERT INTO #b VALUES(1,3) 
INSERT INTO #b VALUES(2,1) 

SELECT DISTINCT a.ida, sum(number) OVER (PARTITION BY a.ida) FROM #a a 
INNER JOIN #b b on a.ida = b.ida 
संबंधित मुद्दे