Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да завъртите таблици в MySQL

Има 3 неща, върху които трябва да помислите 1) Как динамично да генерирате набор от max (случай, когато 2) като зададете нещо за групиране на случай, когато е от - в този случай генерирам номер на ред с помощта на променлива 3) някои от вашите длъжности съдържат празно пространство, което премахвам за генериране на заглавки на колони

set @sql = 
            (select concat('select ', gc,            ' from 
             (select name,job_title,
                if (job_title <> @p, @rn:=1 ,@rn:[email protected]+1) rn,
                @p:=job_title p
                from t
                cross join (select @rn:=0,@p:=null) r
                order by job_title
              ) s group by rn;') from
            (select 
                group_concat('max(case when job_title = ', char(39),job_title ,char(39),' then name else char(32) end ) as ',replace(job_title,char(32),'')) gc
                from
                (
                select distinct job_title from t
                ) s
                ) t
             )
;           

Генерира този sql код

select max(case when job_title = 'Fireman' then name else char(32) end ) as Fireman,
        max(case when job_title = 'Driver' then name else char(32) end ) as Driver,
        max(case when job_title = 'Analyst' then name else char(32) end ) as Analyst,
        max(case when job_title = 'Postman' then name else char(32) end ) as Postman,
        max(case when job_title = 'Research Manager' then name else char(32) end ) as ResearchManager
         from 
             (select name,job_title,
                if (job_title <> @p, @rn:=1 ,@rn:[email protected]+1) rn,
                @p:=job_title p
                from t
                cross join (select @rn:=0,@p:=null) r
                order by job_title
              ) s group by rn;

Което може да бъде изпратено на динамичен sql

prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;

резултат

+---------+--------+---------+---------+-----------------+
| Fireman | Driver | Analyst | Postman | ResearchManager |
+---------+--------+---------+---------+-----------------+
| Sam     | Tomas  | Lisa    | Marcus  | Mary            |
| Peter   | Chen   | Stephan |         |                 |
|         |        | Albert  |         |                 |
+---------+--------+---------+---------+-----------------+
3 rows in set (0.00 sec)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разбиране на структурата на записите на MyISAM

  2. Как да вмъкнете в MySQL с помощта на подготвен оператор с PHP

  3. Неуспешно намиране на валидна директория с данни. Обща двоична инсталация на MySQL

  4. mysql заявка ПОКАЗВАНЕ НА КОЛОНИ ОТ таблица като 'colmunname':questions

  5. показване на mysql нов ред в HTML