Les bases de données relationnelles stockent d'énormes quantités de données sous forme de tableaux. Ces tableaux peuvent avoir n'importe quel nombre de lignes et de colonnes. Mais que se passerait-il si vous deviez remplacer les données au niveau des lignes par des données en colonnes ? Eh bien, dans cet article sur SQL Pivot, je vais vous montrer comment convertir des lignes en colonne dans un serveur SQL.
Les sujets suivants seront abordés dans cet article :
- Qu'est-ce que PIVOT en SQL ?
- Syntaxe
- Exemple
- Fonctionnement de la clause PIVOT
- SQL UNPIVOT
Qu'est-ce que PIVOT en SQL ?
PIVOT est utilisé pour faire pivoter la valeur de la table en convertissant les valeurs uniques d'une seule colonne en plusieurs colonnes. Il est utilisé pour faire pivoter les lignes en valeurs de colonne et exécute des agrégations si nécessaire sur les valeurs de colonne restantes.
UNPIVOT, en revanche, permet d'effectuer les opérations inverses. Ainsi, il est utilisé pour convertir les colonnes d'une table spécifique en valeurs de colonne.
Passons à autre chose dans cet article, laissez-nous comprendre la syntaxe de SQL Pivot.
Syntaxe :
SELECT NonPivoted ColumnName, [First Pivoted ColumnName] AS ColumnName, [Second Pivoted ColumnName] AS ColumnName, [Third Pivoted ColumnName] AS ColumnName, ... [Last Pivoted ColumnName] AS ColumnName FROM (SELECT query which produces the data) AS [alias for the initial query] PIVOT ( [AggregationFunction](ColumName) FOR [ColumnName of the column whose values will become column headers] IN ( [First Pivoted ColumnName], [Second Pivoted ColumnName], [Third Pivoted ColumnName] ... [last pivoted column]) ) AS [alias for the Pivot Table];
Ici, vous pouvez également utiliser la clause ORDER BY pour trier les valeurs dans l'ordre croissant ou décroissant. Maintenant que vous savez ce qu'est PIVOT dans SQL et sa syntaxe de base, allons de l'avant et voyons comment l'utiliser.
Exemples
Pour votre meilleure compréhension, je vais considérer le tableau suivant pour vous expliquer tous les exemples.
Tableau des fournisseurs :
ID fournisseur | Jours de fabrication | Coût | ID client | ID d'achat |
1 | 12 | 1230 | 11 | P1 |
2 | 21 | 1543 | 22 | P2 |
3 | 32 | 2 345 | 11 | P3 |
4 | 14 | 8765 | 22 | P1 |
5 | 42 | 3452 | 33 | P3 |
6 | 31 | 5431 | 33 | P1 |
7 | 41 | 2342 | 11 | P2 |
8 | 54 | 3654 | 22 | P2 |
9 | 33 | 1234 | 11 | P3 |
10 | 56 | 6832 | 33 | P2 |
Écrivons une requête simple pour récupérer le coût moyen dépensé par chaque client.
SELECT CustomerID, AVG(Cost) AS AverageCostofCustomer FROM Suppliers GROUP BY CustomerID;
Sortie :
ID client | Coûtmoyenduclient |
11 | 1787,75 |
22 | 4654 |
33 | 5238.33 |
Maintenant, disons que nous voulons faire pivoter le tableau ci-dessus. Ici, les valeurs de la colonne CustomerID deviendront les en-têtes de colonne.
-- Create Pivot table with one row and three columns SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33] FROM (SELECT CustomerID, Cost FROM Suppliers) AS SourceTable PIVOT ( AVG(Cost) FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
Sortie :
Cost_According_To_Customers | 11 | 22 | 33 |
Coût moyen du client | 1787,75 | 4654 | 5238.33 |
Remarque : Lorsque vous utilisez des fonctions d'agrégation avec PIVOT, les valeurs nulles ne sont pas prises en compte lors du calcul d'une agrégation.
Eh bien, c'était un exemple de base, mais voyons maintenant comment fonctionnait la clause PIVOT.
Fonctionnement de la clause PIVOT
Comme vous pouvez vous y référer ci-dessus, pour créer un TABLEAU PIVOT, vous devez suivre les étapes ci-dessous :
- Sélectionner les colonnes à faire pivoter
- Ensuite, sélectionnez une table source.
- Appliquez l'opérateur PIVOT, puis utilisez les fonctions d'agrégation.
- Mentionnez les valeurs pivots.
Sélectionnez les colonnes à faire pivoter
Au départ, nous devons spécifier les champs à inclure dans nos résultats. Dans notre exemple, j'ai considéré la colonne AverageCostofCustomer dans le tableau croisé dynamique. Ensuite, nous avons créé trois autres colonnes avec les en-têtes de colonne 11, 22 et 33. Exemple-
SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]
Sélectionner la table source
Ensuite, vous devez spécifier l'instruction SELECT qui renverra les données source pour le tableau croisé dynamique. Dans notre exemple, nous renvoyons le CustomerID et le Cost de la table Suppliers.
(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable
Appliquez l'opérateur PIVOT, puis utilisez les fonctions d'agrégation
Ensuite, vous devez spécifier la fonction d'agrégation à utiliser lors de la création du tableau croisé dynamique. Dans notre exemple, j'ai utilisé la fonction AVG pour calculer le coût moyen.
PIVOT ( AVG(Cost)
Mentionner les valeurs pivots
Enfin, vous devez mentionner les valeurs qui doivent être incluses dans le tableau croisé dynamique résultant. Ces valeurs seront utilisées comme en-têtes de colonne dans le tableau croisé dynamique.
FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
C'est ainsi que fonctionnent les opérateurs PIVOT. Passant à cet article sur SQL PIVOT, laissez-nous comprendre à quel point il est différent de SQL UNPIVOT.
SQL UNPIVOT
L'opérateur SQL UNPIVOT permet d'effectuer l'opération inverse à celle de PIVOT. Il est utilisé pour faire pivoter les données de colonne en données de niveau ligne. La syntaxe de UNPIVOT est similaire à celle de PIVOT. La seule différence est que vous devez utiliser le mot-clé SQL "UNPIVOT" .
Exemple :
Créons une table avec les colonnes SupplierID, AAA, BBB et CCC. Aussi, insérez quelques valeurs.
CREATE TABLE sampletable (SupplierID int, AAA int, BBB int, CCC int); GO INSERT INTO sampletable VALUES (1,3,5,6); INSERT INTO sampletable VALUES (2,9,2,8); INSERT INTO sampletable VALUES (3,8,1,7); GO
Sortie :
ID fournisseur | AAA | BBB | CCC |
1 | 3 | 5 | 6 |
2 | 9 | 2 | 8 |
3 | 8 | 1 | 7 |
Maintenant, disons, nous voulons annuler le pivotement de la table. Pour ce faire, vous pouvez vous référer au code suivant :
SELECT SupplierID, Customers, Products FROM (SELECT SupplierD, AAA, BBB, CCC FROM sampletable) p UNPIVOT (Products FOR Customers IN (AAA, BBB, CCC) )AS example; GO
ID fournisseur | Clients | Produits |
1 | AAA | 3 |
1 | BBB | 5 |
1 | CCC | 6 |
2 | AAA | 9 |
2 | BBB | 2 |
2 | CCC | 8 |
3 | AAA | 8 |
3 | BBB | 1 |
3 | CCC | 7 |
C'est ainsi que vous pouvez utiliser SQL PIVOT et UNPIVOT. Sur ce, nous arrivons à la fin de cet article. J'espère que vous avez compris comment utiliser SQL. Si vous souhaitez en savoir plus sur MySQL et découvrir cette base de données relationnelle open source, consultez notre formation de certification MySQL DBA qui vient avec une formation en direct dirigée par un instructeur et une expérience de projet réelle. Cette formation vous aidera à comprendre MySQL en profondeur et vous aidera à maîtriser le sujet.
Vous avez une question pour nous ? Veuillez le mentionner dans la section des commentaires de cet article sur SQL Pivot et je vous recontacterai.