SQL Server 2005 動態資料透視
在 SQL Server 2005 中,處理列數未知的資料透視操作可能比較棘手。本文探討解決此類問題的方案。
問題:
如何在 SQL Server 2005 中動態透視列數未知的資料?期望的輸出應類似於一個表,其中唯一學生作為行,動態列表示作業,並按截止日期排序。如果可能,"總計"列應出現在最後。
解答:
由於 SQL Server 2005 的限制,可能需要使用動態 SQL 來實現動態透視。一個可能的解決方案是利用動態管理視圖 (DMV) 和 XML 產生動態 SQL 語句。
<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>
此方法產生一個動態 SQL 語句,其中包含根據表中標識的不同作業名稱進行透視所需的列。
注意:
雖然此解決方案涉及動態 SQL,但它不會受到注入攻擊,因為 SQL 語句是從已知和可信任資料建構的。或者,如果資料頻繁更改,請考慮實現程式碼產生以建立具有所需 SQL 語句的預存程序。
以上是如何在 SQL Server 2005 中動態透視未知列的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!