2010-11-05 18 views
6

मान लीजिए कि मैंएक और स्तंभ के योग पर आधारित स्तंभ का चयन करें

SalesManagerId, SaleAmount, ProductId 

है मैं प्रत्येक के लिए SaleAmount (SalesManagerId, ProductId) योग और अधिकतम sum(SaleAmount) साथ ProductId हड़पने के लिए चाहते हैं।

क्या यह एक प्रश्न में संभव है?

उदाहरण:

1, 100, 1 
1, 200, 1 
1, 600, 1 
1, 400, 2 
2, 100, 3 
3, 100, 4 
3, 100, 4 
2, 500, 6 
3, 100, 5 

परिणाम:

1, 900, 1 
2, 500, 6 
3, 200, 4 
+0

ठीक है, के बाद वापस-और- मेरी पोस्ट में आगे मैं अंत में महसूस करता हूं कि आप क्या पूछ रहे हैं। आपने कहा था कि आप "बिक्री (विक्रेता प्रबंधक आईडी, उत्पाद आईडी) के लिए बिक्री राशि को जोड़ना चाहते हैं और अधिकतम राशि (SaleAmount) के साथ ProductId को पकड़ना चाहते हैं" - कृपया उस खंड की शुरुआत में "प्रत्येक SalesManagerId" के लिए "कृपया जोड़ें। यह स्पष्ट नहीं था कि आप प्रति प्रबंधक * बिल्कुल एक पंक्ति * चाहते हैं। –

उत्तर

3

यदि आप, विश्लेषणात्मक कार्यों उपलब्ध आप एक RANK()

कुछ की तरह उपयोग कर सकते हैं:

SELECT SalesManagerId, ProductId, Total 
FROM (
    SELECT SalesManagerId, 
     ProductId, 
     SUM(SaleAmount) as Total, 
     RANK() OVER(PARTITION BY SalesManagerId 
        ORDER BY SUM(SaleAmount) DESC) as R 
    FROM <Table name> 
    GROUP BY SalesManagerId, ProductId) as InnerQuery 
WHERE InnerQuery.R = 1 
+0

वाह। यह गर्मता है! – Monogonator

+0

+1 मैंने जो पकाया उससे बेहतर है। एक नोट: आप अपने आंतरिक चयन के भाग से गुम हो रहे हैं। –

+0

धन्यवाद जो। मैंने प्लेसहोल्डर से जोड़ा है। – Axn

-2

बहुत अच्छा सवाल! तुम सिर्फ योग स्तंभ नहीं छोड़ सकते हैं और केवल उत्पाद आईडी

0

उपयोग ग्रुप द्वारा और आदेश प्राप्त

SELECT MAX(SUM(SaleAmount)), ProductId GROUP BY SalesManagerId, ProductId; 

या वैकल्पिक रूप से

SELECT SUM(SaleAmount) as Sum, ProductId GROUP BY SalesManagerId, ProductId ORDER BY Sum DESC; 

:

इस प्रयास करें

SELECT SalesManagerId, SUM(SaleAmount) AS SaleSum, ProductId FROM [table-name] GROUP BY SalesManagerId, ProductId ORDER BY SaleSum DESC 
+0

यह काम नहीं करता है; यह वही 'SalesManagerId' के लिए कई पंक्तियां देता है। मैं केवल अधिकतम 'सेलसम' के साथ चाहता हूं। – Monogonator

+0

क्षमा करें, मैंने बस शीर्ष पंक्ति को वापस करने के लिए क्वेरी के अंत में "LIMIT 1" जोड़ने के लिए एक संपादन किया है। –

+0

'LIMIT 1' टी-एसक्यूएल में मान्य नहीं है। (मुझे पहले से टी-एसक्यूएल निर्दिष्ट करना चाहिए था।) – Monogonator

2

मान लिया जाये कि कम से कम एसक्यूएल 2005 तो आप उपयोग कर सकते हैं एक CTE:

;with cteTotalSales as (
    select SalesManagerId, ProductId, SUM(SaleAmount) as TotalSales 
     from YourSalesTable 
     group by SalesManagerId, ProductId 
), 
cteMaxSales as (
    select SalesManagerId, MAX(TotalSales) as MaxSale 
     from cteTotalSales 
     group by SalesManagerId 
) 
select ts.SalesManagerId, ms.MaxSale, ts.ProductId 
    from cteMaxSales ms 
     inner join cteTotalSales ts 
      on ms.SalesManagerId = ts.SalesManagerId 
       and ms.MaxSale = ts.TotalSales 
    order by ts.SalesManagerId 
+0

यहां समाधान के इस पर क्या फायदे हैं: http: // stackoverflow।कॉम/प्रश्न/410 9 622/चयन-कॉलम-आधारित-पर-एक-कॉलम/410 9 768 # 410 9 768 – Monogonator

+0

एक्सन का समाधान यहां मैंने जो पकाया है उससे बेहतर है क्योंकि यह कार्य को एक ही पास में पूरा करेगा तालिका। –

+0

अभी भी मददगार है क्योंकि मैंने कुछ नया सीखा है! धन्यवाद! – Monogonator

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