ホームページ >データベース >mysql チュートリアル >T-SQL でデータを動的にピボットする方法
T-SQL の動的ピボット
データ処理の分野では、動的ピボットはデータを行形式から列形式に変換する際に重要な役割を果たします。これは、データを集約して構造化した方法で表示する必要がある場合に特に便利です。
次の形式のデータを含むテーブルがあるとします:
ItemID | ColumnName | Value |
---|---|---|
1 | name | Peter |
1 | phone | 12345678 |
1 | [email protected] | |
2 | name | John |
2 | phone | 87654321 |
2 | [email protected] | |
3 | name | Sarah |
3 | phone | 55667788 |
3 | [email protected] |
あなたの目標は、このテーブルを次の形式に変換することです:
ItemID | name | phone | |
---|---|---|---|
1 | Peter | 12345678 | [email protected] |
2 | John | 87654321 | [email protected] |
3 | Sarah | 55667788 | [email protected] |
T-SQL の動的ピボットを使用すると、静的 SQL ステートメントを必要とせずに、この変換を動的に実装できます。次のコードは、このタスクを実行する方法を示しています:
<code class="language-sql">CREATE TABLE #Table ( ID INT, ColumnName VARCHAR(250), Value VARCHAR(250) ) INSERT INTO #Table SELECT 1,'name','Peter' INSERT INTO #Table SELECT 1,'phone','12345678' INSERT INTO #Table SELECT 1,'email','[email protected]' INSERT INTO #Table SELECT 2,'name','John' INSERT INTO #Table SELECT 2,'phone','87654321' INSERT INTO #Table SELECT 2,'email','[email protected]' INSERT INTO #Table SELECT 3,'name','Sarah' INSERT INTO #Table SELECT 3,'phone','55667788' INSERT INTO #Table SELECT 3,'email','[email protected]' DECLARE @cols NVARCHAR(2000) DECLARE @query NVARCHAR(4000) SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT '],[' + t.ColumnName FROM #Table AS t FOR XML PATH('') ), 1, 2, '') + ']' SET @query = N'SELECT ID,'+ @cols +' FROM (SELECT t1.ID,t1.ColumnName , t1.Value FROM #Table AS t1) p PIVOT (MAX([Value]) FOR ColumnName IN ( '+ @cols +' )) AS pvt;' EXECUTE(@query) DROP TABLE #Table</code>
このコードでは、STUFF 関数と EXECUTE 関数を使用して動的 SQL ステートメントを構築します。構築されたクエリは、テーブル内のさまざまな列名に基づいて PIVOT ステートメントを動的に生成します。 MAX() 集計関数は、各列の最新の値が返されることを保証します。
最終結果は、データをピボット形式で表示するニーズを満たす変換されたテーブルです。この手法は、大規模なデータ セットや複雑なデータ構造を扱う場合に特に役立ちます。
以上がT-SQL でデータを動的にピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。