ホームページ >データベース >mysql チュートリアル >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 サイトの他の関連記事を参照してください。