2012-04-29 15 views
8

तक योग मैं इस समय अपने आप एसक्यूएल के बारे में अधिक सिखाने के लिए कोशिश कर रहा हूँ और वर्तमान में एक एसक्यूएल सर्वर 2008 डेटाबेस के भीतर SUM, COUNT, AVG और GROUP BY कार्यों का उपयोग कर रिपोर्टिंग के लिए कुछ सरल बिक्री बाहर ले जाने की कोशिश कर रहा हूँ। मैंने पंक्ति से प्रत्येक समूह की कुल, गिनती और औसत प्राप्त करने में कामयाब रहा है।हो रही ग्रैंड समूह का उपयोग कर

मैं पंक्तियों द्वारा सभी समूह की भव्य कुल कैसे प्राप्त करूं?

एसक्यूएल अब तक:

SELECT 
    SUM(dbo.tbl_orderitems.mon_orditems_pprice) AS prodTotal, 
    AVG(dbo.tbl_orderitems.mon_orditems_pprice) AS avgPrice, 
    count(dbo.tbl_orderitems.uid_orditems_prodid) AS prodQty, 
    dbo.tbl_orderitems.txt_orditems_pname 
FROM 
    dbo.tbl_orderitems 
INNER JOIN 
    dbo.tbl_orders 
    ON (dbo.tbl_orderitems.uid_orditems_orderid = dbo.tbl_orders.uid_orders) 
WHERE 
    dbo.tbl_orders.uid_order_webid = 
     <cfqueryparam cfsqltype="cf_sql_integer" value="#session.webid#"> 
    AND dbo.tbl_orders.txt_order_status = 
     <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.sale_status#"> 
GROUP BY 
    dbo.tbl_orderitems.txt_orditems_pname 
 
Product       Qty  Gross  Avg 

Westbury Climbing Frame   17  8,023.00  471.94 
Sandpoint Deluxe Climbing Frame 34  36,146.00 1,063.12 
Roseberry Climbing Frame   9  7,441.00  826.78 
Ridgeview Texas Climbing Frame 10  6,990.00  699 
Selwood Picnic Table    9  489.92  54.44 

I need the Totals of qty column and gross column 

बहुत धन्यवाद

जेसन

+1

क्या आप जो आउटपुट चाहते हैं उसका उदाहरण दे सकते हैं? मैं पूरी तरह से समझ नहीं पा रहा हूं कि – Lock

+0

के बाद आप क्या कर रहे हैं ['ग्रुपिंग सेट्स]] (http://technet.microsoft.com/en-us/library/bb510427 (v = sql.100) .aspx) –

+0

क्षमा करें !! –

उत्तर

13

आप ROLLUP ऑपरेटर की तलाश में हैं जो परिणाम सेट के अंत में एक बड़ी कुल पंक्ति जोड़ देगा। रोलअप या घन ऐसे @MartinSmith या Aggregation WITH ROLLUP

SELECT 
    SUM(dbo.tbl_orderitems.mon_orditems_pprice) AS prodTotal, 
    AVG(dbo.tbl_orderitems.mon_orditems_pprice) AS avgPrice, 
    count(dbo.tbl_orderitems.uid_orditems_prodid) AS prodQty, 
    dbo.tbl_orderitems.txt_orditems_pname 
FROM 
    dbo.tbl_orderitems 
INNER JOIN 
    dbo.tbl_orders ON (dbo.tbl_orderitems.uid_orditems_orderid = dbo.tbl_orders.uid_orders) 
WHERE 
    dbo.tbl_orders.uid_order_webid = <cfqueryparam cfsqltype="cf_sql_integer" value="#session.webid#"> 
    AND dbo.tbl_orders.txt_order_status = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.sale_status#"> 
GROUP BY 
    dbo.tbl_orderitems.txt_orditems_pname 
WITH ROLLUP 
+5

बस एक नोट: 'रोल के साथ' और 'क्यूब के साथ' सुविधाओं को बहिष्कृत किया गया है और इससे बचा जाना चाहिए। (इस मैनुअल पेज के * गैर-आईएसओ अनुपालन सिंटेक्स * अनुभाग देखें (http://msdn.microsoft.com/en-us/library/ms177673.aspx "ग्रुप बाय (ट्रांजैक्ट-एसक्यूएल)")। आप इसके बजाय 'ROLLUP()' का उपयोग कर सकते हैं: 'ग्रुप बाय रोलअप (dbo.tbl_orderitems.txt_orditems_pname) '। –

+0

जो अच्छी तरह से काम करता है और मार्टिन स्मिथ से रोलअप के साथ एकत्रीकरण की जानकारी, मेरे अगले चरणों के लिए अच्छा है - सभी को धन्यवाद –

2

एक और चयन में अपने चयन लपेटें और स्तंभों योग।

4

द्वारा प्रदान की मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन सिर्फ भविष्य में संदर्भ के लिए कड़ी के रूप में, GROUP BY क्लॉज़ के साथ उपयोग आप देख रहे हैं और अधिक जटिल कुल योग के लिए - आप ग्रुपिंग सेट्स का उपयोग करके समूह प्रक्रिया पर अधिक नियंत्रण प्राप्त कर सकते हैं। उदाहरण के लिए:

SELECT 
    SUM(dbo.tbl_orderitems.mon_orditems_pprice) AS prodTotal, 
    AVG(dbo.tbl_orderitems.mon_orditems_pprice) AS avgPrice, 
    count(dbo.tbl_orderitems.uid_orditems_prodid) AS prodQty, 
    COALESCE(dbo.tbl_orderitems.txt_orditems_pname, 'TOTAL') 
FROM 
    dbo.tbl_orderitems 
INNER JOIN 
    dbo.tbl_orders 
    ON (dbo.tbl_orderitems.uid_orditems_orderid = dbo.tbl_orders.uid_orders) 
WHERE 
    dbo.tbl_orders.uid_order_webid = 
     <cfqueryparam cfsqltype="cf_sql_integer" value="#session.webid#"> 
    AND dbo.tbl_orders.txt_order_status = 
     <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.sale_status#"> 
GROUP BY GROUPING SETS (
    (dbo.tbl_orderitems.txt_orditems_pname), 
    () 
) 

इस तरह परिणाम दोनों पंक्तियों txt_orditems_pname आधार पर वर्गीकृत किया है, और सभी में कोई समूह के साथ होगा। आप अधिक समूह सेट सेट कर सकते हैं, यानी। एक विभाग और टीम में औसत वेतन के लिए एक विभाग, विभाग के लिए कुल योग और पूरी कंपनी भी वापस आ गई।

संबंधित मुद्दे