Database
 sql >> Base de données >  >> RDS >> Database

SQL Pivot – Savoir convertir des lignes en colonnes

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.