Вы должны group by Order ID
и агрегировать:
SELECT
`Order ID`,
MAX(`Qty`) AS `Qty`,
MAX(`Option`) AS `Option`,
MAX(`Size`) AS `Size`,
MAX(`Product`) AS `Product`,
CONCAT_WS(' ',
MAX(CONCAT(
CASE WHEN `Qty` > 1 THEN CONCAT(`Qty`, 'x ') ELSE '' END,
`Option`, ' / ', `Product`,
CASE WHEN COALESCE(`Size`, '') != '' THEN CONCAT(' ', `Size`) ELSE '' END
)),
MAX(`Size`)
) AS `Ref`
FROM (
SELECT
o.`order_id` AS `Order ID`,
op.`quantity` AS `Qty`,
CASE
WHEN oo.`value` LIKE '%Red%' THEN 'R'
WHEN oo.`value` LIKE '%Blue%' THEN 'Bl'
END AS `Option`,
CASE
WHEN op.`name` LIKE '%t-shirt%' THEN 'Tee'
WHEN op.`name` LIKE '%hoodie%' THEN 'Hood'
ELSE op.`name`
END AS `Product`,
CASE
WHEN oo.`value` LIKE '%Small%' THEN 'S'
WHEN oo.`value` LIKE '%Medium%' THEN 'M'
WHEN oo.`value` LIKE '%Large%' THEN 'L'
ELSE ''
END AS `Size`
FROM `order` AS o
INNER JOIN `order_option` AS oo ON o.`order_id` = oo.`order_id`
INNER JOIN `order_product` AS op ON op.`order_product_id` = oo.`order_product_id`
) AS `Orders`
GROUP BY `Order ID`
ORDER BY `Order ID` DESC
Я внес изменения в ваш код, например, используя правильные объединения и псевдонимы для таблиц. Смотрите демо . Результаты:
| Order ID | Qty | Option | Size | Product | Ref |
| -------- | --- | ------ | ---- | ------- | -------------- |
| 12346 | 2 | Bl | S | Hood | 2x Bl / Hood S |
| 12345 | 1 | R | L | Tee | R / Tee L |