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

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

Patricia Arquette
發布: 2025-01-13 07:24:42
原創
894 人瀏覽過

How to Pivot Data with an Unknown Number of Columns in SQL Server 2005?

SQL Server 2005 中處理未知列數的資料透視

本文探討在 SQL Server 2005 中處理未知列數資料的透視難題。給定的資料集包含表示作業和成績的變數列,期望的輸出是透視表,包含作業列和學生總分。

由於 SQL Server 2005 的限制,此任務無法使用純 SQL(無動態 SQL)解決方案。如同建議的答案中所提到的,動態 SQL 提供了一種根據目前資料動態產生必要語句的方法。

例如,如果名為 Assignments 的表包含作業名稱和截止日期:

<code class="language-sql">CREATE TABLE Assignments (
  ID int NOT NULL,
  AssignmentName varchar(50) NOT NULL,
  DueDate datetime
);</code>
登入後複製

以及數據:

<code class="language-sql">INSERT INTO Assignments (ID, AssignmentName, DueDate) VALUES (1, 'Assignment 1', '2023-03-01'), (2, 'Assignment 2', '2023-04-01'), (3, 'Assignment 3', '2023-05-01');</code>
登入後複製

可以使用下列動態 SQL 產生所需的輸出:

<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX);

SET @cols = (SELECT STUFF((
  SELECT ',[' + AssignmentName + ']'
  FROM Assignments
  FOR XML PATH(''), TYPE
), 1, 1, ''));

SET @query = 'SELECT
  StudentName,
  ' + @cols + ',
  SUM(Grade) OVER (PARTITION BY StudentName) AS Total
FROM
  (SELECT
    StudentName,
    AssignmentName,
    CASE WHEN AssignmentName = ''Total'' THEN NULL ELSE Grade END AS Grade
  FROM
    YourTable) AS t
PIVOT
  (MAX(Grade)
  FOR AssignmentName IN (' + @cols + ')) AS pvt';

EXECUTE(@query);</code>
登入後複製

這將建立一個包含作業列和學生總分的透視表,並按截止日期排序(如果表中存在 DueDate 列)。

以上是如何在 SQL Server 2005 中透視列數未知的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板