Maison > base de données > tutoriel mysql > Comment faire pivoter dynamiquement des données avec des colonnes inconnues dans SQL Server 2005 ?

Comment faire pivoter dynamiquement des données avec des colonnes inconnues dans SQL Server 2005 ?

Mary-Kate Olsen
Libérer: 2025-01-13 09:46:43
original
835 Les gens l'ont consulté

How to Dynamically Pivot Data with Unknown Columns in SQL Server 2005?

Pivot dynamique SQL Server 2005

Dans SQL Server 2005, les opérations de pivot avec un nombre inconnu de colonnes peuvent être délicates. Cet article explore les solutions à ces problèmes.

Question :

Comment faire pivoter dynamiquement des données avec un nombre inconnu de colonnes dans SQL Server 2005 ? Le résultat souhaité doit ressembler à un tableau avec des étudiants uniques sous forme de lignes, des colonnes dynamiques représentant les devoirs et triés par date d'échéance. Si possible, la colonne « Total » doit apparaître en dernier.

Réponse :

En raison des limitations de SQL Server 2005, il peut être nécessaire d'utiliser du SQL dynamique pour implémenter des pivots dynamiques. Une solution possible consiste à exploiter les vues de gestion dynamique (DMV) et XML pour générer des instructions SQL dynamiques.

<code class="language-sql">DECLARE @DynamicSQL NVARCHAR(MAX) = N'';

-- 从表中获取不同的作业名称
SELECT DISTINCT AssignmentName
INTO #AssignmentNames
FROM TableName;

-- 循环遍历作业名称
SELECT @DynamicSQL = @DynamicSQL + '
  MAX(CASE WHEN AssignmentName = ''' + AssignmentName + ''' THEN Grade END) AS ' + AssignmentName + ','

FROM #AssignmentNames;

-- 删除动态 SQL 语句末尾的逗号
SET @DynamicSQL = LEFT(@DynamicSQL, LEN(@DynamicSQL) - 1);

-- 构造用于透视的最终动态 SQL 语句
SET @DynamicSQL = 'SELECT StudentName, ' + @DynamicSQL + '
  FROM TableName
  GROUP BY StudentName;';

-- 执行动态 SQL 语句
EXEC sp_executesql @DynamicSQL;</code>
Copier après la connexion

Cette méthode génère une instruction SQL dynamique qui contient les colonnes requises pour pivoter en fonction des différents noms de tâches identifiés dans le tableau.

Remarque :

Bien que cette solution implique du SQL dynamique, elle n'est pas vulnérable aux attaques par injection car les instructions SQL sont construites à partir de données connues et fiables. Alternativement, si les données changent fréquemment, envisagez d'implémenter la génération de code pour créer des procédures stockées avec les instructions SQL requises.

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