2011-12-17 5 views
5

मैं इस SQL ​​क्वेरी एक समूह द्वारा एक साथ सभी पंक्तियों है कि एक ही Player_id नहीं बल्कि एक ही Game_id शामिल विलय करने के लिए करता है कि है:कैसे T-SQL में पंक्तियों द्वारा समूह गिनती करने के लिए

SELECT p.Player_id, 
     p.Name, 
     p.Position, 
     SUM(s.Goals) AS goalsb, 
     SUM(s.Assists) AS assistsb, 
     SUM(s.Points) AS pointsb 
FROM Dim_Player AS p 
INNER JOIN Fact_Statistics AS s ON s.Player_id = p.Player_id 
GROUP BY p.Player_id, p.Name, p.Position 
ORDER BY pointsb DESC, goalsb DESC 

मैं क्या चाहते हैं जब भी "गेम्स खेले गए" नामक एक नया कॉलम बनाने के लिए ग्रुप बाय एक पंक्ति के साथ विलय करता है तो प्रत्येक बार COUNT लागू होता है। उदाहरण:

Player_id  Game_id goalsb 
8470598  465  1 
8470598  435  1 

इस SQL ​​क्वेरी के साथ समूहीकृत हो जाएगा ऊपर बनने के लिए:

Player_id   goalsb 
8470598   2 

लेकिन मैं इस करना चाहते हैं:

Player_id   goalsb  Games_played 
8470598   2   2 
+2

सुनिश्चित नहीं है कि आप प्रश्न को समझते हैं लेकिन आपके SELECT कथन में 'COUNT (DISTINCT Game_Id) 'जोड़कर समस्या हल हो जाती है? –

+0

यह काम किया। मैं COUNT (*) –

+0

कर रहा था, मैं इसका उत्तर दूंगा :) –

उत्तर

12

आप Game_id के दोहराव है और आप अलग-अलग मान गणना कैसे करना चाहेंगे, तो आप अपने SELECT बयान करने के लिए एक

COUNT (DISTINCT Game_id) 

खंड जोड़ सकते हैं।

0

का चयन करने के लिए एक गिनती समारोह जोड़ें क्वेरी। COUNT (*) चयनित कॉलम से स्वतंत्र समूह में प्रत्येक पंक्ति की गणना करता है।

SELECT p.Player_id, p.Name, p.Position, SUM(s.Goals) AS goalsb, SUM(s.Assists) AS assistsb, SUM(s.Points) AS pointsb, COUNT(*) as [Games_played] 
FROM Dim_Player AS p INNER JOIN Fact_Statistics AS s ON s.Player_id = p.Player_id 
GROUP BY p.Player_id, p.Name, p.Position, s.Game_id 
ORDER BY pointsb DESC, goalsb DESC 
संबंधित मुद्दे