2017-09-13 59 views
0
 
------------------------------------------------------------ 
courseid|course |coursedesc        | 
------------------------------------------------------------ 
1  | BSIT  | Bachelor of science in info tech  | 
2  | BSCS  | Bachelor of science in comp sci  | 
3  | BSHRM | Bachelor of science in hotel & res | 

我想将其转换为这样的事情动态转换行与列在MySQL

 
--------------------------------- 
|course1 | course2 | course3 | 
--------------------------------- 
BSIT  | BSCS  | BSCS  | 

我有这样的代码,并给我结果:

MySQL返回的查询结果为空(即零行)。

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'count(case when course = ''', 
     course, 
     ''' then 1 end) AS ', 
     replace(course, ' ', '') 
    ) 
) INTO @sql 
from tbl_course; 

SET @sql = CONCAT('SELECT course, ', @sql, ' from tbl_course 

group by course'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

请别喊了,并考虑在应用程序代码中处理显示问题 – Strawberry

+0

对不起@Strawberry –

+6

的可能的复制[MySQL的 - 行分列] (https://stackoverflow.com/questions/1241178/mysql-rows-to-columns) – Alexander

回答

0

查询

set @query = null; 
select 
    group_concat(distinct 
    concat(
     'max(case when `courseid` = ', 
     `courseid`, ' then `course` end) as `course', `courseid`, '`' 
    ) 
) into @query 
from `tbl_course`; 

set @query = concat('select ', @query, ' from `tbl_course` '); 

prepare stmt from @query; 
execute stmt; 
deallocate prepare stmt; 

Find a demo here

+0

它给了我相同的结果# MySQL返回一个空的结果集(即零行)。 @Wanderer –

+0

@MarkLopez:这两列中是否有空值? – Wanderer

+0

无@Wanderer先生 –