Maison > base de données > tutoriel mysql > Comment générer dynamiquement des colonnes pivot dans SQL Server ?

Comment générer dynamiquement des colonnes pivot dans SQL Server ?

Mary-Kate Olsen
Libérer: 2025-01-07 18:47:41
original
544 Les gens l'ont consulté

How to Dynamically Generate Pivot Columns in SQL Server?

Colonnes pivot dynamiques dans SQL Server

Dans SQL Server, les colonnes pivot dynamiques vous permettent de créer un tableau croisé dynamique dont les colonnes changent en fonction des valeurs d'une autre table. Ceci est utile lorsque le nombre de colonnes pivot est inconnu à l’avance ou change fréquemment.

Considérez la forme suivante :

  • Propriété : Contient une liste de propriétés.
  • PropertyObjects : Liez les propriétés aux objets et fournissez des valeurs pour les propriétés.

Énoncé du problème

Vous souhaitez créer un tableau croisé dynamique contenant une colonne pour chaque propriété du tableau Propriété. Cependant, le nombre de propriétés peut changer, vous avez donc besoin d'un moyen d'obtenir les noms de colonnes de manière dynamique.

Solution

Pour créer des colonnes pivot dynamiques, vous pouvez utiliser du SQL dynamique avec la clause PIVOT. Le code suivant illustre une solution :

<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, '');

-- 构造动态查询
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;';

-- 执行动态查询
EXEC(@query);</code>
Copier après la connexion

Résultats

La requête dynamique renverra un tableau croisé dynamique contenant une colonne pour chaque propriété de la table Propriété. La valeur dans le tableau croisé dynamique sera la valeur maximale pour chaque combinaison attribut-objet.

Par exemple, si la table Propriété contient les propriétés suivantes :

  • Propriété1
  • Propriété2
  • Propriété3

et la table PropertyObjects contient les données suivantes :

OBJECT_ID PROPERTY_ID VALUE
1 1 ee
1 2 fd
1 3 fdf
1 4 ewre
2 1 dsd
2 2 sss
2 3 dfew
2 4 dff

La requête dynamique renverra le tableau croisé dynamique suivant :

OBJECT_ID PROPERTY1 PROPERTY2 PROPERTY3 PROPERTY4
1 ee fd fdf ewre
2 dsd sss dfew dff

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!

source:php.cn
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