sql >> データベース >  >> RDS >> Mysql

ダイナミックピボットMySQL

    SELECT id,SUM(CASE WHEN Item='Chocolate' THEN Purchased END) as Chocolate_Purchased,
    SUM(CASE WHEN Item='Biscuit' THEN Purchased END) as Biscuit_Purchased,
    SUM(CASE WHEN Item='Jelly' THEN Purchased END) Jelly_Purchased,
    SUM(CASE WHEN Item='Mile' THEN Purchased END) as Mile_Purchased 
    GROUP BY id
    

    これが動的バージョンです

    SET @sql = NULL;
    SELECT
    GROUP_CONCAT(DISTINCT
        CONCAT(
          'SUM(IF(t.item = ''',
          item,
          ''', t.purchased, 0)) AS ',
          item
        )
       )INTO @sql
    FROM t;
    
    SET @sql = CONCAT('SELECT id,
                         ', @sql, ' 
                       FROM t               
                       GROUP BY id');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    フィドル




    1. 重複キー挿入例外をキャッチ

    2. Group_concatMySQL関数と同等のOracle

    3. DBMS_STATSを使用したユーザー定義ルーチン、パ​​ートII

    4. IRIソフトウェアをOracleに接続する