Résumé: dans ce didacticiel, vous apprendrez à utiliser lopérateur SQL Server PIVOT
pour convertir des lignes en colonnes.
Configuration des objectifs
Pour la démonstration, nous utiliserons les production.products
et production.categories
tables de la base de données exemple:
La requête suivante trouve le nombre de produits pour chaque catégorie de produits:
Voici le résultat:
Notre objectif est de transformer les noms de catégories de la première colonne de la sortie en plusieurs colonnes et de compter le nombre de produits pour chacune nom de la catégorie comme limage suivante:
De plus, nous pouvons ajouter lannée modèle pour regrouper la catégorie ory par année modèle comme indiqué dans la sortie suivante:
Introduction à lopérateur PIVOT SQL Server
Lopérateur SQL Server PIVOT
fait pivoter une expression table. Il transforme les valeurs uniques dune colonne en plusieurs colonnes dans la sortie et effectue des agrégations sur toutes les valeurs de colonne restantes.
Suivez ces étapes pour transformer une requête en tableau croisé dynamique:
- Tout dabord, sélectionnez un ensemble de données de base pour le pivotement.
- Ensuite, créez un résultat temporaire en utilisant une table dérivée ou une expression de table commune (CTE)
- Troisièmement, appliquez le
PIVOT
opérateur.
Appliquons ces étapes dans lexemple suivant.
Tout dabord, sélectionnez le nom de la catégorie et lID produit dans production.products
et production.categories
comme données de base pour le pivotement:
Deuxièmement, créez un ensemble de résultats temporaire à laide dune table dérivée:
Troisièmement, appliquez lopérateur PIVOT
:
Cette requête génère le résultat suivant:
Maintenant, toute colonne supplémentaire que vous ajoutez à la liste de sélection de la requête qui renvoie le base les données formeront automatiquement des groupes de lignes dans le tableau croisé dynamique. Par exemple, vous pouvez ajouter la colonne de lannée modèle à la requête ci-dessus:
Voici le résultat:
Génération de valeurs de colonne
Dans la requête ci-dessus, vous deviez saisir chaque nom de catégorie entre parenthèses après le IN
manuellement. Pour éviter cela, vous pouvez utiliser la fonction QUOTENAME()
pour générer la liste des noms de catégorie et les copier sur la requête.
Commencez par générer la liste des noms de catégorie:
La sortie ressemblera à ceci:
Dans cet extrait:
- La fonction
QUOTENAME()
encapsule le nom de catégorie entre crochets, par exemple - La fonction
LEFT()
supprime la dernière virgule de la chaîne @columns .
Ensuite, copiez la liste des noms de catégorie à partir de la sortie et collez-la dans la requête.
Tableaux croisés dynamiques dynamiques
Si vous ajoutez un nouveau nom de catégorie dans la table production.categories
, vous devez réécrire votre requête, ce qui nest pas idéal. Pour éviter cela, vous pouvez utiliser le SQL dynamique pour rendre le tableau croisé dynamique dynamique.
Dans cette requête, au lieu de passer une liste fixe de noms de catégories à PIVOT
, nous construisons la liste des noms de catégorie et la passons à une instruction SQL, puis exécutons cette instruction dynamiquement en utilisant la procédure stockée sp_executesql
.
Dans ce tutoriel , vous avez appris à utiliser la table SQL Server PIVOT
pour convertir des lignes en colonnes.