2011-12-17 17 views
5

Ho questa query SQL che fa un GROUP BY per unire insieme tutte le righe che contengono lo stesso player_id ma non lo stesso Game_id:Come contare GROUP BY righe in 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 

quello che voglio fare è impiantare un COUNT ogni volta che GROUP BY unisce una riga con un'altra per creare una nuova colonna chiamata "Giochi giocati". Esempio:

Player_id  Game_id goalsb 
8470598  465  1 
8470598  435  1 

questo verranno raggruppate con la query SQL sopra per diventare:

Player_id   goalsb 
8470598   2 

Ma voglio avere questo:

Player_id   goalsb  Games_played 
8470598   2   2 
+2

Non sei sicuro di aver compreso la domanda, ma l'aggiunta di un 'COUNT (DISTINCT Game_Id)' alla tua istruzione SELECT risolve il problema? –

+0

Ha funzionato. Stavo facendo COUNT (*) –

+0

Farò una risposta fuori di esso :) –

risposta

12

Se avete ripetendo Game_id 's e ti piacerebbe contare i valori distinti, è possibile aggiungere una clausola di

COUNT (DISTINCT Game_id) 

al vostro SELECT dichiarazione.

0

Aggiungere una funzione di conteggio alla select query. COUNT (*) conta ogni riga del gruppo, indipendentemente dalle colonne selezionate.

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