You can avoid Nulls with ...
CASE
WHEN null then ''
when `oo`.`name` LIKE 'Color%' THEN `oo`.`value`
ELSE ''
END AS `Option`,
That gives this dataset from the inner query ...
+----------+-----+-------------+-------+----------+
| Order ID | Qty | Option | Style | Product |
+----------+-----+-------------+-------+----------+
| 12345 | 1 | Classic Red | C | ProductA |
| 12345 | 1 | Classic Red | C | ProductA |
| 12345 | 1 | Classic Red | V | ProductA |
| 12345 | 1 | Classic Red | V | ProductA |
| 12346 | 1 | Grey | | ProductB |
| 12346 | 1 | | Y | ProductB |
+----------+-----+-------------+-------+----------+
But I don't understand what you expect from the pattern ...select a,max(b)...group by a,b. Grouping by the only non-aggregated value, order_id, gets ...
+----------+------+-------------+-------+----------+
| Order ID | Qty | Option | Style | Product |
+----------+------+-------------+-------+----------+
| 12345 | 1 | Classic Red | V | ProductA |
| 12346 | 1 | Grey | Y | ProductB |
+----------+------+-------------+-------+----------+