snippetsqlModerate
How to pivot rows into columns MySQL
Viewed 0 times
rowscolumnsintopivotmysqlhow
Problem
Been looking to pivot rows (progress_check) into columns check 1, check 2 etc...
No sum or totals required, just to display the results hopefully...
Can anyone help, Thanks Ad
No sum or totals required, just to display the results hopefully...
Can anyone help, Thanks Ad
Solution
GROUP BY and using MAX or SUM is the most used standard pivot way.
Result
see demo http://sqlfiddle.com/#!9/0be1f2/1
SELECT
results.sims_id
, results.subject
, MAX(CASE WHEN results.progress_check = "C1" THEN results.result END) "C1"
, MAX(CASE WHEN results.progress_check = "C2" THEN results.result END) "C2"
, MAX(CASE WHEN results.progress_check = "C3" THEN results.result END) "C3"
FROM
results
GROUP BY
results.sims_id
, results.subject
ORDER BY
results.sims_id ASC
, results.subject ASCResult
sims_id subject C1 C2 C3
------- ------- ------ ------ --------
1111 Art C B (NULL)
1111 English 6 5 (NULL)
1111 History B C (NULL)
1111 maths 8 8 (NULL)
1111 science A B (NULL)
2222 Art (NULL) A (NULL)
2222 English 6 (NULL)
2222 ICT A B (NULL)
2222 maths 7 6 (NULL)
2222 science A A* (NULL)see demo http://sqlfiddle.com/#!9/0be1f2/1
Code Snippets
SELECT
results.sims_id
, results.subject
, MAX(CASE WHEN results.progress_check = "C1" THEN results.result END) "C1"
, MAX(CASE WHEN results.progress_check = "C2" THEN results.result END) "C2"
, MAX(CASE WHEN results.progress_check = "C3" THEN results.result END) "C3"
FROM
results
GROUP BY
results.sims_id
, results.subject
ORDER BY
results.sims_id ASC
, results.subject ASCsims_id subject C1 C2 C3
------- ------- ------ ------ --------
1111 Art C B (NULL)
1111 English 6 5 (NULL)
1111 History B C (NULL)
1111 maths 8 8 (NULL)
1111 science A B (NULL)
2222 Art (NULL) A (NULL)
2222 English 6 (NULL)
2222 ICT A B (NULL)
2222 maths 7 6 (NULL)
2222 science A A* (NULL)Context
StackExchange Database Administrators Q#164711, answer score: 12
Revisions (0)
No revisions yet.