sql >> Databáze >  >> RDS >> Mysql

Vytvořte souhrnné zobrazení v MySQL otočením řádku do dynamického počtu sloupců

Potřebujete pivotovat tabulku, ale mysql žádnou takovou funkci pivot nemá

takže musíme replikovat jeho funkčnost

UPRAVENO

Select 
  group_concat(
    DISTINCT 
       if(year is null,
          CONCAT('max(if (year is null, state, 0)) as ''NULL'' '),
          CONCAT('max(if (year=''', year, ''', state, 0)) as ''',year, ''' '))
    ) into @sql from tbl join (SELECT @sql:='')a;
set @sql = concat('select company_name, ', @sql, 'from tbl group by company_name;');
PREPARE stmt FROM @sql;
EXECUTE stmt;

Výsledek

| COMPANY_NAME | 2008 | 2009 | 2010 | NULL |
--------------------------------------------
|     companyA |    1 |    0 |    0 |    0 |
|     companyB |    0 |    2 |    0 |    0 |
|     companyC |    0 |    0 |    3 |    3 |

SQL FIDDLE

Existují 2 přístupy k vyřešení vašeho problému1. vytvořit případ pro každý rok, což ve vašem případě není možné, protože se zabýváme rokem2. generujte dotaz dynamicky, abychom získali správné sloupce podle vašich potřeb.

Dal jsem řešení podle druhého řešení, kde generuji dotaz a ukládám jej do @sql variabilní. V housle jsem vytiskl obsah @sql před jeho provedením.

select company_name, max(if (year='2008', state, 0)) as '2008' ,max(if (year='2009', state, 0)) as '2009' ,max(if (year='2010', state, 0)) as '2010' ,max(if (year is null, state, 0)) as 'NULL' from tbl group by company_name; 

Další informace týkající se group_concat() přejděte na odkazGROUP_CONCAT aPROMĚNNÁ DEFINOVANÁ UŽIVATELEM

Doufám, že to pomůže..



  1. ExecuteNonQuery pro příkaz SELECT sql nevrací žádné řádky

  2. Knihovna není načtena:@rpath/libmysqlclient.21.dylib Důvod:obrázek nebyl nalezen Chyba migrace Django pomocí ovladače mysqlclient DB a MySQL 8 s macOS

  3. Vygenerujte jedinečné náhodné alfanumerické znaky o délce 7 znaků

  4. Migrace databáze Oracle z AWS EC2 na AWS RDS, část 4