nosemicolon check and MySQL pivot reports

Re: nosemicolon check and MySQL pivot reports

by Louise Bennett -
Number of replies: 0

I'm a little bit late in answering this, but this is what I came up with to do something similar: 

 

SELECT DISTINCT u.firstname, u.lastname,
CASE
WHEN (SELECT timeenrolled FROM prefix_course_completions WHERE userid = u.id AND course = 3) IS NULL THEN "---"
WHEN (SELECT timecompleted FROM prefix_course_completions WHERE userid = u.id AND course = 3) IS NOT NULL THEN "Completed"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 3) ="" THEN "Not yet started"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 3) IS NOT NULL THEN "In progress"
END AS BSBWOR501B,
CASE
WHEN (SELECT timeenrolled FROM prefix_course_completions WHERE userid = u.id AND course = 4) IS NULL THEN "---"
WHEN (SELECT timecompleted FROM prefix_course_completions WHERE userid = u.id AND course = 4) IS NOT NULL THEN "Completed"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 4) ="" THEN "Not yet started"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 4) IS NOT NULL THEN "In progress"
END AS BSBPMG522A,
CASE
WHEN (SELECT timeenrolled FROM prefix_course_completions WHERE userid = u.id AND course = 5) IS NULL THEN "---"
WHEN (SELECT timecompleted FROM prefix_course_completions WHERE userid = u.id AND course = 5) IS NOT NULL THEN "Completed"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 5) ="" THEN "Not yet started"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 5) IS NOT NULL THEN "In progress"
END AS BSBWOR502B,
CASE
WHEN (SELECT timeenrolled FROM prefix_course_completions WHERE userid = u.id AND course = 6) IS NULL THEN "---"
WHEN (SELECT timecompleted FROM prefix_course_completions WHERE userid = u.id AND course = 6) IS NOT NULL THEN "Completed"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 6) ="" THEN "Not yet started"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 6) IS NOT NULL THEN "In progress"
END AS BSBFIM501A,
CASE
WHEN (SELECT timeenrolled FROM prefix_course_completions WHERE userid = u.id AND course = 7) IS NULL THEN "---"
WHEN (SELECT timecompleted FROM prefix_course_completions WHERE userid = u.id AND course = 7) IS NOT NULL THEN "Completed"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 7) ="" THEN "Not yet started"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 7) IS NOT NULL THEN "In progress"
END AS BSBFRSK501B,
CASE
WHEN (SELECT timeenrolled FROM prefix_course_completions WHERE userid = u.id AND course = 8) IS NULL THEN "---"
WHEN (SELECT timecompleted FROM prefix_course_completions WHERE userid = u.id AND course = 8) IS NOT NULL THEN "Completed"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 8) ="" THEN "Not yet started"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 8) IS NOT NULL THEN "In progress"
END AS BSBMGT502B,
CASE
WHEN (SELECT timeenrolled FROM prefix_course_completions WHERE userid = u.id AND course = 12) IS NULL THEN "---"
WHEN (SELECT timecompleted FROM prefix_course_completions WHERE userid = u.id AND course = 12) IS NOT NULL THEN "Completed"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 12) ="" THEN "Not yet started"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 12) IS NOT NULL THEN "In progress"
END AS BSBMGT515A,
CASE
WHEN (SELECT timeenrolled FROM prefix_course_completions WHERE userid = u.id AND course = 16) IS NULL THEN "---"
WHEN (SELECT timecompleted FROM prefix_course_completions WHERE userid = u.id AND course = 16) IS NOT NULL THEN "Completed"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 16) ="" THEN "Not yet started"
WHEN (SELECT timestarted FROM prefix_course_completions WHERE userid = u.id AND course = 16) IS NOT NULL THEN "In progress"
END AS BSBMGT516C
FROM prefix_user AS u
JOIN prefix_user_enrolments AS ue on ue.userid = u.id
JOIN prefix_enrol AS en on en.id = ue.enrolid
JOIN prefix_course AS c on c.id = en.courseid
JOIN prefix_context AS ctx ON c.id = ctx.instanceid
JOIN prefix_role_assignments AS ra ON ra.contextid = ctx.id
WHERE en.courseid = 112

 

 

Obviously, this is a pretty 'manual' solution, in that I've set up each course within the category manually. I also have an overall course (112) where all students are enrolled, regardless of their enrolment in other courses. 

I'm not terribly proficient with mySQL, so there's probably a lot that could be done better in this; it's the best way I could figure out, though. smile 

Average of ratings: Useful (1)