可以使用CASE
和骨料:
select persid,
max(case when taskid = 1 then status end) as Task1,
max(case when taskid = 2 then status end) as Task2
from course
group by persid
如果要包括課程信息:
select persid,
course,
max(case when taskid = '1' then status end) as Task1,
max(case when taskid = '2' then status end) as Task2
from course
group by persid, course
order by course, persid
見SQL Fiddle with Demo
如果你有不明數量的任務,那麼你c一個使用prepared statement動態生成的:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when taskid = ''',
taskid,
''' then status end) AS Task_',
taskid
)
) INTO @sql
FROM course;
SET @sql = CONCAT('SELECT persid, course, ', @sql, '
FROM course
group by persid, course
order by course, persid');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
見SQL Fiddle with Demo
感謝您的快速回答! ive更新了我的問題 – user1693991