Maison > base de données > tutoriel mysql > Comment créer des colonnes pivotantes dynamiques dans SQL Server ?

Comment créer des colonnes pivotantes dynamiques dans SQL Server ?

Barbara Streisand
Libérer: 2025-01-07 18:41:40
original
680 Les gens l'ont consulté

How to Create Dynamic Pivot Columns in SQL Server?

Explication détaillée des colonnes du tableau croisé dynamique dynamique SQL Server

Dans SQL Server, les tableaux croisés dynamiques sont utilisés pour remodeler les données en convertissant les lignes en colonnes. Cependant, lorsque les noms de colonnes sont dynamiques et inconnus à l'avance, la création manuelle d'un tableau croisé dynamique devient difficile. Cet article explore une solution à ce problème en générant dynamiquement des colonnes pivot à partir du tableau.

Supposons que nous ayons une table Propriété avec les colonnes suivantes :

<code>Id    Name</code>
Copier après la connexion

Nous avons également une table PropertyObjects qui stocke les valeurs de propriété pour des objets spécifiques :

<code>Id    Object_Id    Property_Id    Value</code>
Copier après la connexion

Notre objectif est de créer un tableau croisé dynamique dans lequel chaque colonne correspond à un attribut défini dans le tableau Propriétés, et chaque colonne affiche la valeur de l'attribut correspondant et l'ID de l'objet.

Afin de générer dynamiquement des colonnes pivot, nous pouvons utiliser les étapes suivantes :

  1. Obtenez tous les différents noms d'attributs :
DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);

SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(Name)
                      FROM property
                      FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
Copier après la connexion

Cela créera une chaîne @cols séparée par des virgules contenant les noms de toutes les propriétés.

  1. Créer une requête pivot :
SET @query =
'SELECT *
FROM
(
  SELECT
    o.object_id,
    p.Name,
    o.value
  FROM propertyObjects AS o
  INNER JOIN property AS p ON o.Property_Id = p.Id
) AS t
PIVOT 
(
  MAX(value) 
  FOR Name IN (' + @cols + ')
) AS p;';
Copier après la connexion

Cela créera une requête SQL dynamique @query qui contient une logique pivot.

  1. Exécuter la requête :
EXEC sp_executesql @query;
Copier après la connexion

L'exécution de @query renverra un tableau croisé dynamique avec les noms de colonnes générés dynamiquement à partir de la table des propriétés.

Avec les étapes ci-dessus, nous pouvons gérer efficacement les noms de colonnes dynamiques pour créer des tableaux croisés dynamiques flexibles et évolutifs. Il est à noter que cette méthode s'appuie sur du SQL dynamique, veillez donc à assurer la sécurité des données avant utilisation pour éviter le risque d'injection SQL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal