ホームページ >データベース >mysql チュートリアル >動的ピボットを使用して T-SQL でデータを動的にピボットする方法
動的ピボットを使用して 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 サイトの他の関連記事を参照してください。