SQL Server 2005 Dynamic Pivot
In SQL Server 2005 können Pivot-Vorgänge mit einer unbekannten Anzahl von Spalten schwierig sein. In diesem Artikel werden Lösungen für solche Probleme untersucht.
Frage:
Wie kann ich Daten mit unbekannter Spaltenanzahl in SQL Server 2005 dynamisch Pivotieren? Die gewünschte Ausgabe sollte einer Tabelle mit eindeutigen Schülern als Zeilen, dynamischen Spalten für Aufgaben und einer Sortierung nach Fälligkeitsdatum ähneln. Wenn möglich, sollte die Spalte „Gesamt“ zuletzt erscheinen.
Antwort:
Aufgrund der Einschränkungen von SQL Server 2005 kann es erforderlich sein, dynamisches SQL zu verwenden, um dynamische Pivots zu implementieren. Eine mögliche Lösung besteht darin, dynamische Verwaltungsansichten (DMVs) und XML zu nutzen, um dynamische SQL-Anweisungen zu generieren.
<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>
Diese Methode generiert eine dynamische SQL-Anweisung, die die für die Pivotierung erforderlichen Spalten basierend auf den verschiedenen in der Tabelle identifizierten Jobnamen enthält.
Hinweis:
Obwohl diese Lösung dynamisches SQL beinhaltet, ist sie nicht anfällig für Injektionsangriffe, da die SQL-Anweisungen aus bekannten und vertrauenswürdigen Daten erstellt werden. Wenn sich die Daten häufig ändern, sollten Sie alternativ die Implementierung einer Codegenerierung in Betracht ziehen, um gespeicherte Prozeduren mit den erforderlichen SQL-Anweisungen zu erstellen.
Das obige ist der detaillierte Inhalt vonWie kann ich Daten mit unbekannten Spalten in SQL Server 2005 dynamisch Pivotieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!