ホームページ >データベース >mysql チュートリアル >SQL Server 2005 で列数が不明なデータをピボットするにはどうすればよいですか?

SQL Server 2005 で列数が不明なデータをピボットするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-13 07:24:42888ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。