Il faut utiliser la fonction SUM avec le group BY, voici la copie de l'aide MSDN la dessus :
-----
,
Référence de Transact-SQL
SUM
Renvoie la somme de toutes les valeurs, ou uniquement des valeurs distinctes (DISTINCT) de l'expression. Les fonctions SUM ne s'emploient que sur des colonnes de type numérique. Les valeurs Null sont ignorées.
Syntaxe
SUM ( [ ALL | DISTINCT ] expression )
Arguments
ALL
Applique la fonction d'agrégation à toutes les valeurs. ALL est l'argument par défaut.
DISTINCT
Précise que la fonction SUM doit renvoyer la somme des valeurs uniques.
expression
Constante, colonne ou fonction, et toute combinaison d'opérateurs arithmétiques, de type chaîne ou au niveau du bit. expression est de type numérique exact ou approximatif, à l'exception du type bit. Les fonctions d'agrégation et les sous-requêtes ne sont pas autorisées.
Type des valeurs renvoyées
Renvoie la somme de toutes les valeurs de expression dans le type de données de expression le plus précis.
Résultat de l'expression |
Type renvoyé |
----
catégorie d'entiers,
int,
----
catégorie décimale (p, s),
decimal(38, s),
----
catégorie money et smallmoney,
money,
----
catégorie de réels (real) et flottants (float),
float
<!--IMPORTANT-->
Important Les fonctions d'agrégation distinctes, par exemple AVG(DISTINCT column_name), COUNT(DISTINCT column_name), MAX(DISTINCT column_name), MIN(DISTINCT column_name), et SUM(DISTINCT column_name), ne sont pas prises en charge avec CUBE ou ROLLUP. En cas d'utilisation de ces fonctions, Microsoft® SQL Server™ renvoie un message d'erreur et annule la requête.
<!--/IMPORTANT-->
Exemple
A. Utilisation de SUM pour les fonctions d'agrégation et d'agrégation par rang
Les exemples suivants illustrent les différences entre les fonctions d'agrégation et celles d'agrégation par rang. Le premier exemple montre les fonctions d'agrégation donnant uniquement des données résumées, et le second montre les fonctions d'agrégation par rang donnant des données résumées et détaillées.
USE pubs
GO
-- Aggregate functions
SELECT type, SUM(price), SUM(advance)
FROM titles
WHERE type LIKE '%cook'
GROUP BY type
ORDER BY type
GO
Voici le jeu de résultats obtenu :
type
------------ -------------------------- --------------------------
mod_cook 22.98 15,000.00
trad_cook 47.89 19,000.00
(2 row(s) affected)
USE pubs
GO
-- Row aggregates
SELECT type, price, advance
FROM titles
WHERE type LIKE '%cook'
ORDER BY type
COMPUTE SUM(price), SUM(advance) BY type
Voici le jeu de résultats obtenu :
type price advance
------------ -------------------------- --------------------------
mod_cook 19.99 0.00
mod_cook 2.99 15,000.00
sum
==========================
22.98
sum
==========================
15,000.00
type price advance
------------ -------------------------- --------------------------
trad_cook 20.95 7,000.00
trad_cook 11.95 4,000.00
trad_cook 14.99 8,000.00
sum
==========================
47.89
sum
==========================
19,000.00
(7 row(s) affected)
B. Calcul des totaux dans les groupes comportant plus d'une colonne
Dans l'exemple suivant, la procédure calcule la somme des prix et des avances pour chaque type de livre :
USE pubs
GO
SELECT type, SUM(price), SUM(advance)
FROM titles
GROUP BY type
ORDER BY type
GO
Voici le jeu de résultats obtenu :
type
------------ -------------------------- --------------------------
business 54.92 25,125.00
mod_cook 22.98 15,000.00
popular_comp 42.95 15,000.00
psychology 67.52 21,275.00
trad_cook 47.89 19,000.00
UNDECIDED (null) (null)
(6 row(s) affected)
-----
Romelard Fabrice (Alias F___)