首頁 >資料庫 >mysql教程 >如何在 SQL Server 2005 中動態透視未知列的資料?

如何在 SQL Server 2005 中動態透視未知列的資料?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-13 09:46:43789瀏覽

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

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn