Maison >base de données >tutoriel mysql >Comment créer des colonnes pivotantes dynamiques dans 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>
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>
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 :
<code class="language-sql">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, '');</code>
Cela créera une chaîne @cols séparée par des virgules contenant les noms de toutes les propriétés.
<code class="language-sql">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;';</code>
Cela créera une requête SQL dynamique @query qui contient une logique pivot.
<code class="language-sql">EXEC sp_executesql @query;</code>
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!