2011-03-02 21 views
6

में निहित पंक्तियों का चयन करना मैं SQL सर्वर के लिए एक क्वेरी पर काम कर रहा हूं और मुझे आश्चर्य है कि कोई भी मुझे व्यक्तिगत पंक्तियों को चुनने पर कुछ सुझाव दे सकता है जो समूह बनाते हैं (जहां समूह कुल पर आधारित है फ़ंक्शन, COUNT इस मामले में)एसक्यूएल: समूह

तो, सरलीकृत उदाहरण के रूप में, यदि मेरे पास बिलिंग की एक तालिका है, तो नीचे, मैं प्रत्येक ग्राहक के लिए सभी बिलिंग चुनना चाहता हूं जहां उनके पास एक निश्चित तिथि के बाद 2 या अधिक बिलिंग हैं।

ClaimID  ClaimDate    ClientName 
101   May 5, 2010   Jim 
102   June 19, 2010   Jim 
103   August 5, 2008  Jim 
104   January 1, 2011  Mary 
105   May 8, 2009   Mary 
106   November 4, 2010  Mary 
107   October 6, 2010  Mary 
108   April 4, 2010   Bob 
109   April 29, 2009  Bob 
110   July 7, 2006   Joe 

तो अगर मैं निष्पादित

SELECT ClientName, COUNT(ClaimID) FROM Billings 
WHERE ClaimDate > '2010' 
Group By ClientName 
Having COUNT(ClaimID) > 1 

मैं चाहता हूँ:

Jim 2 
Mary 3 

कौन सा अच्छा है, यह सभी ग्राहकों को जो समय सीमा में 2 या अधिक बिलिंग है पाता है, लेकिन मैं वास्तव में उन बिलिंग्स को सूचीबद्ध करना चाहता हूं। तो मैं यह चाहता हूँ:

ClaimID ClientName Count 
101   Jim  2 
102   Jim  2 
104   Mary 3 
106   Mary 3 
107   Mary 3 

आपको क्या लगता है सबसे अच्छा तरीका यह है है?

धन्यवाद।

उत्तर

8

आप उस तालिका में मुख्य तालिका में शामिल हो जाते हैं।

SELECT B.ClaimID, B.ClaimDate, B.ClientName, G.ClaimCount 
FROM 
(
    SELECT ClientName, COUNT(ClaimID) ClaimCount 
    FROM Billings 
    WHERE ClaimDate > '2010' 
    Group By ClientName 
    Having COUNT(ClaimID) > 1 
) G 
INNER JOIN Billings B on B.ClientName = G.ClientName 
WHERE B.ClaimDate > '2010' 
1
Select ClaimID, ClientName, Count From Billings 
Where ClientName In (SELECT ClientName FROM Billings 
        WHERE ClaimDate > '2010' 
        Group By ClientName 
        Having COUNT(ClaimID) > 1) And ClaimDate > '2010' 

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

+1

(1) 'Count' एक आरक्षित शब्द (2) यह सबक्वेरी से लापता है है – RichardTheKiwi

4

SQL सर्वर 2005 मान लिया जाये या बाद में आप एक आम-तालिका अभिव्यक्ति

उपयोग कर सकते हैं
With MultipleBillings As 
    (
    Select ClaimId, ClaimDate, ClientName 
     , Count(ClaimId) Over (Partition By ClientName) As BillingCount 
    From Billings 
    Where ClaimDate > '2010' 
    ) 
Select ClaimId, ClaimDate, ClientName 
From MultipleBillings 
Where BillingCount > 1 
संबंधित मुद्दे