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

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

Patricia Arquette
リリース: 2025-01-08 00:51:42
オリジナル
150 人が閲覧しました

この SQL コードは、データ型を失うことなく行を列に動的にピボットします。これには、多くの場合、集計関数が必要です。わかりやすくし、読みやすくするために、言い換えてみましょう。

How to Dynamically Pivot Rows to Columns in SQL Without Aggregation?

SQL で行を列に動的にピボットする: 型保持ソリューション

標準 SQL PIVOT 操作は通常、集計関数 (MAXMIN など) を必要とするため、データ損失や型強制が発生する可能性があります。この例では、元のデータ型を維持しながら行を列にピボットし、最大 12 個のテスト名を処理する動的 SQL アプローチを示します。

課題は、可変数のテスト名 (最大 12) と混合データ型を含むテーブルを、各テスト名が列になるテーブルに変換することにあります。 この変動に対応するには、動的なソリューションが必要です。

動的 SQL ソリューション

このソリューションは、動的 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>
ログイン後にコピー

コードはまず、一意の @cols 値から列名のカンマ区切りリスト (TEST_NAME) を作成します。 次に、PIVOT を集計関数として使用して、@query クエリ (MAX(val)) を構築します。 MAX が使用されている間、各 SBNO 内の一意の値に基づいてピボットしているため、元のデータが効果的に保存されます。 最後に、生成されたクエリが実行されます。

出力例

出力テーブルには、一意のテスト名ごとに列があり、元のテーブルの対応する値が入力され、元のデータ型が維持されます。

<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 での動的なピボットのための堅牢なソリューションを提供します。 yourtable をテーブルの実際の名前に置き換えることを忘れないでください。

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

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