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

Utwórz widok podsumowania w MySQL, przestawiając wiersz na dynamiczną liczbę kolumn

Musisz obrócić tabelę, ale mysql nie ma takiej funkcji obrotu

więc musimy powtórzyć jego funkcjonalność

EDYTOWANO

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;

Wynik

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

SQL FIDDLE

Istnieją 2 podejścia do rozwiązania Twojego problemu1. twórz sprawę na każdy rok, co nie jest możliwe w Twoim przypadku, ponieważ mamy do czynienia z year2. generuj zapytanie dynamicznie, dzięki czemu otrzymamy odpowiednie kolumny zgodnie z Twoimi potrzebami.

Podałem rozwiązanie zgodnie z drugim rozwiązaniem, w którym generuję zapytanie i przechowuję je w @sql zmienny. Na skrzypcach wydrukowałem zawartość @sql przed wykonaniem.

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; 

Więcej informacji na temat group_concat() przejdź przez linkGROUP_CONCAT orazZMIENNA ZDEFINIOWANA PRZEZ UŻYTKOWNIKA

Mam nadzieję, że to pomoże...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego nadal ma niezsynchronizowane polecenia; nie możesz teraz uruchomić tego polecenia, błąd

  2. Strategia buforowania, kiedy buforowanie staje się bezcelowe?

  3. Usuwanie rekordów starszych niż miesiąc/30 dni

  4. Hibernuj automatycznie twórz bazę danych

  5. łącz tabele i transponuj kolumny i wiersze