OK! I've a table that looks like this: SQLFiddle
And I want to get some handlers to provide to my renderer php page, so that the final result be like this:
+----------------+----------------------------+----------------------------+
| | JANUARY | FEBRUARY |
+ product_name +---------------+------------+---------------+------------+
| | Tt. quant_ton | AVG value | Tt. quant_ton | AVG value |
+----------------+---------------+------------+---------------+------------+
| gravel | 41 | 51.25 | 22 | 55.00 |
+----------------+---------------+------- ----+---------------+------- ----+
| soil | 23 | 29.90 | 10 | 13.00 |
+----------------+---------------+------------+---------------+------------+
I don't know how to retrieve this data. I tried with CASE THEN but one case removes data from the other, leaving the table with blank fields.
Best Answer
You can use your CASE variant with some modifications. First you need to extend the
GROUP BY
with MONTH(date):If not MySQL will randomly pick one month for you. There's a lot to be said about this default setting (insane comes to mind:-), but look up
sql_mode ONLY_FULL_GROUP_BY
for ways around it.As you can see now you will get null for non-matching months:
By picking - for example - max of JAN and FEV you will get rid of those
However, the pivoting is only a presentation of the result. I would choose a query like:
and then format the result in the presentation layer of the application.