ホームページ > データベース > mysql チュートリアル > 集計を行わずに SQL で行を列にピボットする方法は?

集計を行わずに SQL で行を列にピボットする方法は?

Mary-Kate Olsen
リリース: 2025-01-08 00:21:41
オリジナル
714 人が閲覧しました

How to Pivot Rows to Columns in SQL Without Aggregation?

集計関数を使用しない SQL 行から列への操作

データ処理では、行データを列データ (行から列へ) に変換することが一般的に必要です。これは、複数の属性に基づいてデータを要約または分析する場合に特に役立ちます。

SQL の PIVOT 関数は、行から列への操作を実装できます。ただし、多くの場合、ピボットされた値を処理するには、PIVOT 関数を集計関数 (MAX や MIN など) と組み合わせる必要があります。ただし、場合によっては、集計操作を行わずに単純な値のピボットを実行したい場合があります。

たとえば、次の列を持つ「TEST」という名前のテーブルについて考えてみましょう:

  • TEST_NAME
  • SBNO
  • ヴァル

VAL 列には、さまざまなデータ型 (整数、10 進数、または varchar) が含まれます。目標は、集計を行わずに TEST_NAME 列を 3 つの個別の列 (Test1、Test2、および Test3) に変換することです。

<code>源表

╔═══════════╦══════╦═══════╗
║ TEST_NAME ║ SBNO ║  VAL  ║
╠═══════════╬══════╬═══════╣
║ Test1     ║    1 ║ 0.304 ║
║ Test1     ║    2 ║ 0.31  ║
║ Test1     ║    3 ║ 0.306 ║
║ Test2     ║    1 ║ 2.3   ║
║ Test2     ║    2 ║ 2.5   ║
║ Test2     ║    3 ║ 2.4   ║
║ Test3     ║    1 ║ PASS  ║
║ Test3     ║    2 ║ PASS  ║
╚═══════════╩══════╩═══════╝</code>
ログイン後にコピー
<code>目标输出

╔══════════════════════════╗
║ SBNO Test1 Test2   Test3 ║
╠══════════════════════════╣
║ 1    0.304  2.3    PASS  ║
║ 2    0.31   2.5    PASS  ║
║ 3    0.306  2.4    NULL  ║
╚══════════════════════════╝</code>
ログイン後にコピー

集計関数を使用せずにこれを実現するには、動的 SQL を使用します。

<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(TEST_NAME)
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)')
        ,1,1,'')

set @query = 'SELECT sbno,' + @cols + '
             from
             (
                select test_name, sbno, val
                from yourtable
            ) x
            pivot
            (
                max(val)
                for test_name in (' + @cols + ')
            ) p '

execute(@query)</code>
ログイン後にコピー

このクエリは、TEST_NAME の一意の値をすべて列名として含む動的 SQL ステートメントを生成します。次に、PIVOT 関数を使用して、集計を適用せずに行データを列に変換します。

この SQL を実行すると、目的の出力が生成されます。これは、元のテーブルの対応する VAL 値を含むピボット列 Test1、Test2、Test3 を持つテーブルです。

この改訂された出力は元の意味を維持していますが、若干異なる表現と文構造を使用しています。

以上が集計を行わずに SQL で行を列にピボットする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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