Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL Pivot Query z sumą wartości kolumny

W przypadku stałej osi sql wypróbuj to:

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

TUTAJ DEMO SQLFiddle

W przypadku dynamicznego przestawnego sql wypróbuj to:

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;

TUTAJ DEMO SQLFiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL 5.6 - tabela blokuje się nawet przy użyciu ALGORITHM=inplace

  2. MySQL uważa 'е' i 'ё' za równe, jak ustawić go, aby traktował je inaczej?

  3. usuń wiersz w mojej bazie danych za pomocą php pdo

  4. Tabele przestawne PHP/MySQL

  5. Jaki jest odpowiednik bezpiecznego dla wartości null operatora równości <=> w SQLite?