Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách xoay bảng trong MySQL

Có 3 điều cần suy nghĩ 1) Cách tạo động một loạt các giá trị max (trường hợp khi 2) chỉ định một cái gì đó để nhóm trường hợp khi của - trong trường hợp này, tôi tạo một số hàng bằng cách sử dụng một biến 3) một số chức danh công việc của bạn chứa khoảng trắng mà tôi xóa để tạo tiêu đề cột

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

Tạo mã sql này

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;

Cái nào có thể được gửi tới sql động

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

kết quả

+---------+--------+---------+---------+-----------------+
| 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. Nhân bản Toàn bộ Cơ sở dữ liệu MySQL

  2. Hibernate 5:- org.hibernate.MappingException:Thực thể không xác định

  3. Truy vấn MySQL với câu lệnh điều kiện?

  4. Cách dễ dàng để tạo một cột tên slug từ cột tên?

  5. Tôi bối rối về các kết nối MySQL đồng thời