Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara membuat tabel pivot di MySQL

Ada 3 hal yang perlu dipikirkan 1) Cara secara dinamis menghasilkan sekelompok maks (kasus ketika 2) menetapkan sesuatu untuk mengelompokkan kasus saat - dalam hal ini saya menghasilkan nomor baris menggunakan variabel 3) beberapa judul pekerjaan Anda berisi spasi putih yang saya hapus untuk pembuatan tajuk kolom

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
             )
;           

Menghasilkan kode sql ini

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;

Yang dapat dikirimkan ke sql dinamis

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

hasil

+---------+--------+---------+---------+-----------------+
| 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. mysql:dapatkan jumlah catatan antara dua tanggal-waktu

  2. permintaan mysql untuk memperbarui bidang ke maks (bidang) + 1

  3. Bagaimana cara menyimpan nilai NULL di bidang datetime di MySQL?

  4. Tampilkan catatan yang lebih lama dari 3 bulan di sql

  5. MySQL:SUM() dengan JOIN mengembalikan nilai yang salah