2013-10-09 25 views
8

यहाँ मेरी समस्या यह है द्वारा समूह के बिना एक योग बनाने के लिए ..कैसे

Actual Auction Ammanat id 
7000  500  100  228,229 
7000  100  100  228,229 
7000  900  100  228,229 
5000  0   0   230 

मैं परिणाम चाहते

Actual Auction Ammanat Remaining id 
7000  500  100  5550  228,229 
7000  100  100  5550  228,229 
7000  900  100  5550  228,229 
5000  0   0   5000  230 

यहाँ नीचे दिए गए के रूप में, Remaining(sum(auction)-actual) है।

मैं PostgreSQL का उपयोग कर रहा हूं। लेकिन अगर किसी को SQL सर्वर में समाधान पता है, तो यह ठीक रहेगा।

(Sum(Auction) OVER()) - actual AS Remaining 
+0

'(योग (नीलामी) -एक्टुअल) 'समझ में नहीं आता है। शायद 'वास्तविक राशि (नीलामी)' होना चाहिए। –

उत्तर

12

आप एक एक खिड़की समारोह का उपयोग करने की आवश्यकता है। मैं इस बात का स्पष्टीकरण प्रदान करना चाहते हैं:

(SUM (Auction) OVER()) 
  • OVER() एक खिड़कीसभी पंक्तियों मूल क्वेरी से सहित पैदा करता है।
  • SUM (Auction)विंडो फ़ंक्शन है जो Auction की राशि की गणना करता है।

    • विंडो एक क्वेरी परिणाम सेट के भीतर पंक्तियों की एक उपयोगकर्ता द्वारा निर्दिष्ट सेट है:

    यहाँ अधिक विवरण है।

  • विंडो फ़ंक्शन विंडो में सभी पंक्तियों पर एक मान (उदा। SUM) की गणना करता है।

  • सभी पंक्तियों विंडो में हैं, क्योंकि OVER()PARTITION BY शामिल नहीं है। PARTITION BY के साथ विंडो में पंक्तियों का सबसेट शामिल होगा।

From MSDN:

... से अधिक खंड एक क्वेरी परिणाम सेट के भीतर एक खिड़की या पंक्तियों के उपयोगकर्ता द्वारा निर्दिष्ट सेट को परिभाषित करता है। एक विंडो फ़ंक्शन तब विंडो में प्रत्येक पंक्ति के लिए मान की गणना करता है। आप समेकित मूल्यों की गणना करने के लिए कार्यों के साथ ओवर ओवर का उपयोग कर सकते हैं ... यदि ओवर क्लॉज में भाग शामिल नहीं है। इसका मतलब है कि फ़ंक्शन क्वेरी द्वारा लौटाई गई सभी पंक्तियों पर लागू होगा।

+0

आपको बहुत बहुत धन्यवाद ... मैं यह भी पूछना चाहता हूं कि एसक्यूएल में इस समस्या से कैसे निपटें? –

+1

SQL सर्वर में यह सुविधा है, उसी वाक्यविन्यास के साथ: http://technet.microsoft.com/en-us/library/ms189461.aspx –

+1

मुझे लगता है कि यह 'वास्तविक - योग (नीलामी) होना चाहिए (आईडी द्वारा भाग) एएस शेष ' –