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

列値の合計を使用したMySQLピボットクエリ

    固定ピボットSQLについては、次のことを試してください:

    select
        t.client_name,
        sum(if(t.distributor = 'Dis A', t.amount, 0)) as `Dis A`,
        sum(if(t.distributor = 'Dis B', t.amount, 0)) as `Dis B`,
        sum(if(t.distributor = 'Dis C', t.amount, 0)) as `Dis C`,
        sum(if(t.distributor = 'Dis D', t.amount, 0)) as `Dis D`
    from (
        select c.id, c.client_name, d.distributor, r.amount
        from clients c
        left join reports r on c.id = r.clientId
        left join distributor d on d.id = r.distributorId
    )t
    group by t.id
    order by t.client_name
    

    SQLFiddleデモはこちら

    動的ピボットSQLの場合は、次のことを試してください。

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'sum(if(t.distributor = ''',
          distributor,
          ''', t.amount, 0)) AS `',
          distributor ,'`'
        )
      ) INTO @sql
    FROM distributor;
    SET @sql = CONCAT('SELECT t.client_name, ', @sql, ' FROM (
        select c.id, c.client_name, d.distributor, r.amount
        from clients c
        left join reports r on c.id = r.clientId
        left join distributor d on d.id = r.distributorId
    )t
    group by t.id
    order by t.client_name');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    SQLFiddleデモはこちら




    1. 大きなinnodbテーブルを高速コピーする方法

    2. SQL Serverエージェントジョブの変更(T-SQL)

    3. Oracle制約データ型

    4. iPerfを使用したネットワーク負荷テスト