ホームページ >データベース >mysql チュートリアル >SQL Server の PIVOT 演算子は、どのようにして複数の列のデータを行指向の形式に再形成できるのでしょうか?
SQL Server の PIVOT の秘密を明らかにする
多くの場合、分析が困難な方法でデータが構造化されているデータセットに遭遇します。そして意味のある形式で提示されます。このようなシナリオの 1 つは、データが複数の列に編成され、各列が特定のカテゴリの異なる値を表す場合に発生します。これらのデータセットを列としてカテゴリ、行として値を含むテーブルに変換するには、SQL Server の PIVOT 演算子を使用できます。
列 "Name1" を持つ "mytable" という名前のテーブルがあるシナリオを考えてみましょう。 、「名前2」、および「値」。このテーブルのデータは、さまざまな名前 (「A」および「B」) に関連付けられたさまざまな値 (「P1」、「P2」、「P3」、「P4」) を表します。
Name1 Name2 Value A P1 1 A P2 1 A P3 2 B P1 3 B P2 1 B P4 1
私たちの目標このデータを次の形式に再構築することです:
A B P1 1 4 P2 1 1 P3 2 NULL P4 NULL 1
SQL Server 2005 では、動的なクエリ構築を利用して、PIVOT を使用してこの変換を実行できます。これはステップバイステップのガイドです:
列名のカンマ区切り文字列を組み立てます: 次のクエリを実行して、すべての個別の "Name1" を含む文字列を作成します。 " で区切られた値カンマ:
DECLARE @cols VARCHAR(1000) SELECT @cols = STUFF(( SELECT distinct ',' + QuoteName([Name1]) FROM myTable FOR XML PATH('') ), 1, 1, '')
動的 SQL クエリの構築: @sqlquery という名前の変数を作成し、次のクエリ テンプレートに割り当てます:
DECLARE @sqlquery VARCHAR(2000) SET @sqlquery = 'SELECT * FROM (SELECT Name2, Name1, Value FROM myTable ) base PIVOT (Sum(Value) FOR [Name1] IN (' + @cols + ')) AS finalpivot'
このアプローチでは、「Name1」列の個別の値に基づいて PIVOT 句が動的に構築されます。 PIVOT 関数は、各「Name1」カテゴリの「Value」列を合計し、その結果、「Name2」の値が行見出しとして機能し、「Name1」カテゴリが列見出しを形成する表が作成されます。
一般的に原則として、PIVOT は、データを列指向の構造から行指向の構造に変換する必要があるときはいつでも利用できます。この手法により、データ分析とプレゼンテーションのタスクを大幅に簡素化できます。
以上がSQL Server の PIVOT 演算子は、どのようにして複数の列のデータを行指向の形式に再形成できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。