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
Barbara Streisandoriginal
2025-01-07 18:41:40641parcourir

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>

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 :

  1. Obtenez tous les différents noms d'attributs :
<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.

  1. Créer une requête pivot :
<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.

  1. Exécuter la requête :
<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!

Déclaration:
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