ホームページ > データベース > mysql チュートリアル > 準備されたステートメントを使用して MySQL でデータを動的にピボットする方法

準備されたステートメントを使用して MySQL でデータを動的にピボットする方法

Mary-Kate Olsen
リリース: 2025-01-06 07:36:40
オリジナル
653 人が閲覧しました

How to Dynamically Pivot Data in MySQL Using Prepared Statements?

準備されたステートメントを使用した MySQL での動的ピボット

MySQL にはネイティブ PIVOT 関数がありませんが、集計関数と CASE ステートメントを使用してエミュレートできます。データを動的にピボットする場合、プリペアド ステートメントは効率的なソリューションを提供します。

製品パーツのテーブルを使用したシナリオを考えてみましょう。

CREATE TABLE Parts (
    part_id INT,
    part_type VARCHAR(1),
    product_id INT
);
INSERT INTO Parts (part_id, part_type, product_id) VALUES
(1, 'A', 1),
(2, 'B', 1),
(3, 'A', 2),
(4, 'B', 2),
(5, 'A', 3),
(6, 'B', 3);
ログイン後にコピー

必要な出力は、各パーツの ID を要約したピボット テーブルです。製品:

product_id  part_A_id  part_B_id
----------  ----------  ----------
1           1          2
2           3          4
3           5          6
ログイン後にコピー

動的ピボットクエリ

SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
    CONCAT(
        'max(case when part_type = ''',
        part_type,
        ''' then part_id end) AS part_',
        part_type, '_id'
    )
) INTO @sql
FROM Parts;
SET @sql = CONCAT('SELECT product_id, ', @sql, ' 
                  FROM Parts 
                   GROUP BY product_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ログイン後にコピー

静的ピボット クエリ (制限された列)

固定数のピボット列を持つ静的クエリの場合:

SELECT product_id,
    max(CASE WHEN part_type = 'A' THEN part_id END) AS part_A_id,
    max(CASE WHEN part_type = 'B' THEN part_id END) AS part_B_id
FROM Parts
GROUP BY product_id;
ログイン後にコピー

以上が準備されたステートメントを使用して MySQL でデータを動的にピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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