DB Fiddle
CREATE TABLE logistics (
id int primary key,
campaign VARCHAR(255),
event_type VARCHAR (255),
date_offered VARCHAR (255),
date_ordered DATE,
date_delivered DATE,
date_recorded DATE,
date_completed DATE,
quantity VARCHAR(255)
);
INSERT INTO logistics
(id, campaign, event_type,
date_offered, date_ordered,
date_delivered, date_recorded, date_completed,
quantity
)
VALUES
("1", "C001", "offered", "2019-04-10", NULL, NULL, NULL, NULL, "500"),
("2", "C001", "ordered", NULL, "2019-04-16", NULL, NULL, NULL, "450"),
("3", "C001", "stored", NULL, NULL, "2019-04-18", "2019-05-20", NULL, "465"),
("4", "C002", "offered", "2019-08-14", NULL, NULL, NULL, NULL, "700"),
("5", "C002", "ordered", NULL, "2019-09-04", NULL, NULL, NULL, "730"),
("6", "C002", "stored", NULL, NULL, "2019-09-15", "2019-09-18", "2019-09-19", "800");
Я хочу выполнить запрос, который:
a) добавляет новый столбец sub_event_type
к приведенной выше таблице и
b) coalesce
таблица, так что все date values
находятся в одном столбце с именем event_date
Результат должен выглядеть следующим образом:
campaign event_type sub_event_type event_date quantity
C001 offer NULL 2019-04-10 500
C001 order NULL 2019-04-16 450
C001 stored delivered 2019-04-18 465
C001 stored recorded 2019-05-20 465
C002 offer NULL 2019-08-14 700
C002 order NULL 2019-09-04 730
C002 stored completed 2019-09-15 800
C002 stored delivered 2019-09-18 800
C002 stored recorded 2019-09-19 800
Для достижения этой цели я попытался go с помощью этого запроса:
SELECT
id,
campaign,
event_type,
(CASE
WHEN event_type = "stored" AND date_delivered IS NOT NULL THEN "delivered"
WHEN event_type = "stored" AND date_recorded IS NOT NULL THEN "recorded"
WHEN event_type = "stored" AND date_completed IS NOT NULL THEN "completed"
END) AS sub_event_type,
coalesce(date_offered, date_ordered, date_delivered, date_recorded, date_completed) as event_date,
quantity
FROM logistics;
Однако этот запрос отображает только sub_event_type
delivered
в результате.
Я предполагаю, что причина этой проблемы заключается в том, что в event_type
stored
все date
значения находятся в одной строке, а в event_types
offered
и stored
они находятся в двух отдельных строках.
Как мне изменить запрос, чтобы получить ожидаемый результат?