ホームページ >データベース >mysql チュートリアル >動的ピボットを使用して T-SQL でデータを動的にピボットする方法

動的ピボットを使用して T-SQL でデータを動的にピボットする方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-14 20:11:43345ブラウズ

How to Dynamically Pivot Data in T-SQL Using a Dynamic Pivot?

動的ピボットを使用して T-SQL でデータを変換する

場合によっては、データをワイド形式からより構造化された表形式に変換する必要があります。テーブルに異なるデータ型と値の複数の列が含まれており、ID と対応する列値ごとに異なる行を提供する結果セットを取得するためにデータを動的にピボットする必要がある状況を考えてみましょう。

この変換を実現する 1 つの方法は、T-SQL の動的ピボット機能を使用することです。次の例は、T-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 
                        -- 按 ID 排序以确保列顺序一致
                        ORDER BY '],[' + CAST(t.ID AS VARCHAR(10)) 
                        FOR XML PATH('') 
                      ), 1, 2, '') + ']' 

SELECT  @cols;

-- 动态构建 PIVOT 查询
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;'; 

-- 执行动态 PIVOT 查询
EXECUTE(@query);

-- 删除临时表
DROP TABLE #Table;</code>
上記のスクリプトを実行すると、ID ごとに個別の行と対応する列値を含むピボット テーブルが作成されます。

以上が動的ピボットを使用して T-SQL でデータを動的にピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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