2017-09-13 3 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 | 

私はこのコードを持っていると私は結果を与える。この動的変換行

 
--------------------------------- 
|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:これらの2つの列のいずれかにnull値がありますか? – Wanderer

+0

なしsir @Wanderer –