2008-10-30 5 views
4

J'ai une table comme comme suit:Résumer les données agrégées

 
SoftwareName Count Country 
Project   15  Canada 
Visio   12  Canada 
Project   10  USA 
Visio   5  USA 

Comment ça faire une requête pour me donner un résumé comme ...

 
SoftwareName Canada USA Total 
Project   15  10  25 
Visio   12  5  17 

Comment faire dans T-SQL?

Répondre

6
SELECT SoftwareName, 
    SUM(CASE Country WHEN 'Canada' THEN [Count] ELSE 0 END) AS Canada, 
    SUM(CASE Country WHEN 'USA' THEN [Count] ELSE 0 END) AS USA, 
    SUM([Count]) AS Total 
FROM [Table] 
GROUP BY SoftwareName; 
1

Ceci est appelé pivotement de table. Dans votre cas simple, il n'y a que deux colonnes; en général, il pourrait y avoir 200 pays, auquel cas, le pivotement devient plutôt difficile.

Il existe de nombreuses ressources en ligne décrivant comment faire: Google pour 'table pivot sql'.

3

OK ... Voici comment le faire en utilisant PIVOT:

SELECT Softwarename, Canada, USA, Canada + USA As TOTAL from SoftwareDemo 
PIVOT 
    (
    SUM([Count]) 
    FOR Country 
    IN (Canada, USA) 
    ) AS x 


Softwarename          Canada  USA   TOTAL 
-------------------------------------------------- ----------- ----------- ----------- 
Project           15   10   25 
Visio            12   5   17 

(2 row(s) affected) 
+0

Salut Marlon, J'ai aussi essayé cette solution, et même si je ne vois aucune amélioration en termes de temps d'exécution, je pense que cette solution est très élégante et facile à modifier par la suite. Merci beaucoup. – sammydc

+0

Avec seulement les données d'échantillon comme charge de test, il n'y a pas beaucoup de différence sur leurs performances. Je pense que ce PIVOT est la solution * préférée * pour ce type d'exigence de données. – MarlonRibunal

Questions connexes