Exemple
La clause PIVOT peut être utilisée dans SQL Server (Transact-SQL).
Regardons un exemple. Si nous avions une table d’employés contenant les données suivantes:
numéro_employé | nom de famille | prénom | salaire | id_dépt |
---|---|---|---|---|
12009 | Sutherland | Barbara | 54000 | 45 |
34974 | Yates | Fred | 80000 | 45 |
34987 | Erickson | Neil | 42000 | 45 |
45001 | Parker | Sally | 57500 | 30 |
75623 | Portes | Steve | 65000 | 30 |
Et nous avons exécuté l’instruction SQL suivante qui crée un cross-tabulati sur une requête utilisant la clause PIVOT:
Cela renverrait le résultat suivant:
TotalSalaryByDept | 30 | 45 |
---|---|---|
Salaire total | 122500 | 176000 |
Cet exemple créerait un tableau croisé dynamique pour afficher le salaire total pour dept_id 30 et dept_id 45. Les résultats sont affichés sur une ligne avec les deux départements apparaissant chacun dans sa propre colonne.
Maintenant, séparons la clause PIVOT et expliquons son fonctionnement.
Spécifiez les colonnes dans les résultats de la tabulation croisée
Premièrement, nous voulons spécifier les champs à inclure dans nos résultats de tabulation croisée. Dans cet exemple, nous souhaitons inclure la valeur littérale « TotalSalary » comme première colonne du tableau croisé dynamique. Et nous voulons créer une colonne pour dept_id 30 et une deuxième colonne pour dept_id 45. Cela nous donne 3 colonnes dans notre tableau croisé dynamique.
SELECT "TotalSalary" AS TotalSalaryByDept, ,
Spécifiez la source Données de la table
Ensuite, nous devons spécifier une instruction SELECT qui retournera les données source pour le tableau croisé dynamique.
Dans cet exemple, nous voulons renvoyer les valeurs dept_id et de salaire de la table des employés:
(SELECT dept_id, salary FROM employees) AS SourceTable
Vous devez spécifier un alias pour la requête source. Dans cet exemple, nous avons aliasé la requête comme SourceTable.
Spécifier la fonction d’agrégation
Ensuite, nous devons spécifier la fonction d’agrégation à utiliser lors de la création de notre requête de tabulation croisée. Vous pouvez utiliser n’importe quel agrégat tel que les fonctions SUM, COUNT, MIN, MAX ou AVG.
Dans cet exemple, nous allons utiliser la fonction SUM. Cela additionnera les valeurs de salaire:
PIVOT(SUM(salary)
Spécifier les valeurs de pivot
Enfin, nous devons spécifier les valeurs de pivot à inclure dans nos résultats . Ceux-ci seront utilisés comme en-têtes de colonne dans notre requête de tabulation croisée.
Dans cet exemple, nous allons renvoyer uniquement les valeurs dept_id de 30 et 45. Ces valeurs deviendront nos en-têtes de colonne dans notre tableau croisé dynamique table. Notez également que ces valeurs sont une liste finie des valeurs dept_id et ne contiendront pas nécessairement toutes les valeurs possibles.
FOR dept_id IN (, )
Maintenant, quand nous mettons tout cela ensemble, nous obtenons le tableau croisé dynamique suivant:
TotalSalaryByDept | 30 | 45 |
---|---|---|
TotalSalary | 122500 | 176000 |