SQL Fiddle:
CREATE TABLE Purchasing (
Event_Type VARCHAR(255),
Campaign VARCHAR(255),
Quantity_Offer VARCHAR(255),
Quantity_
This is a prioritization query.
In MySQL 8+, use window functions:
select campaign, event_type,
coalesce(Quantity_Offer, Quantity_Order, Quantity_Received) as quantity
from (select p.*,
row_number() over (partition by campaign order by field(event_type, 'Received', 'Order', 'Offer')) as seqnum
from Purchasing p
) p
where seqnum = 1;
In earlier versions, a simple method is a correlated subquery:
select campaign, event_type,
coalesce(Quantity_Offer, Quantity_Order, Quantity_Received) as quantity
from Purchasing p
where event_type = (select p2.event_type
from Purchasing p2
where p2.campaign = p.campaign
order by field(p2.event_type, 'Received', 'Order', 'Offer')
limit 1
);
If you have a lot of data, you want an index on Purcahsing(campaign, event_type) for this query.
Here is a db<>fiddle.