Maison >base de données >tutoriel mysql >Comment faire pivoter dynamiquement des données avec des colonnes inconnues dans 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>
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!