ホームページ > データベース > mysql チュートリアル > SQL Server の PIVOT 演算子は、どのようにして複数の列のデータを行指向の形式に再形成できるのでしょうか?

SQL Server の PIVOT 演算子は、どのようにして複数の列のデータを行指向の形式に再形成できるのでしょうか?

Mary-Kate Olsen
リリース: 2024-12-25 18:36:13
オリジナル
620 人が閲覧しました

How can SQL Server's PIVOT operator reshape data from multiple columns into a row-oriented format?

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 を使用してこの変換を実行できます。これはステップバイステップのガイドです:

  1. 列名のカンマ区切り文字列を組み立てます: 次のクエリを実行して、すべての個別の "Name1" を含む文字列を作成します。 " で区切られた値カンマ:

    DECLARE @cols VARCHAR(1000)
    SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName([Name1])
                         FROM myTable FOR XML PATH('') ), 1, 1, '') 
    ログイン後にコピー
  2. 動的 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'
    ログイン後にコピー
  3. ダイナミックを実行するクエリ: EXECEUTE (@sqlquery) を使用して @sqlquery 変数を実行し、ピボットされたテーブルを生成します。

このアプローチでは、「Name1」列の個別の値に基づいて PIVOT 句が動的に構築されます。 PIVOT 関数は、各「Name1」カテゴリの「Value」列を合計し、その結果、「Name2」の値が行見出しとして機能し、「Name1」カテゴリが列見出しを形成する表が作成されます。

一般的に原則として、PIVOT は、データを列指向の構造から行指向の構造に変換する必要があるときはいつでも利用できます。この手法により、データ分析とプレゼンテーションのタスクを大幅に簡素化できます。

以上がSQL Server の PIVOT 演算子は、どのようにして複数の列のデータを行指向の形式に再形成できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート