Цены указаны в одной строке и сгруппированы по дате - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь получить четыре разных варианта цены на одной строке, сгруппированных по дате.

У меня есть две таблицы: одна с перечислением товара с его различными дескрипторами, а вторая с историей цен товара. Проблема в том, что у меня есть четыре различных варианта покупки с отдельными линиями для каждого. Каждый элемент в разделе продажи содержит список опционов на покупку, а затем цену на этот день. То, что я пытаюсь сделать, это группировать по дате и иметь возможность видеть цену на все 4 варианта каждый день.

SELECT
s.date,
CASE WHEN s.code = 'Option 1' THEN s.price ELSE NULL END AS Option 1,
CASE WHEN s.code = 'Option 2' THEN s.price ELSE NULL END AS Option 2,
CASE WHEN s.code = 'Option 3' THEN s.price ELSE NULL END AS Option 3,
CASE WHEN s.code = 'Option 4' THEN s.price ELSE NULL END AS Option 4
FROM main_itempage i
JOIN main_sales s ON i.id = s.item_id
WHERE i.id = '[item's id]' AND s.territory_id = 'US' and date 
BETWEEN '2018-01-01' AND '2018-12-31'
GROUP BY date

Хотя я хочу видеть четыре разные цены на одной строке, все, что я получаю, - это одна строка с указанием только цены варианта 1. Остальные три столбца возвращаются только как NULL. Когда я уберу группировку, она будет давать четыре отдельные строки для каждого дня с заполнением только цены одного столбца. Любая помощь, приветствуется Спасибо.

1 Ответ

0 голосов
/ 23 января 2019

Использование агрегации:

SELECT s.date,
       MAX(CASE WHEN s.code = 'Option 1' THEN s.price ELSE NULL END) AS Option 1,
       MAX(CASE WHEN s.code = 'Option 2' THEN s.price ELSE NULL END) AS Option 2,
       MAX(CASE WHEN s.code = 'Option 3' THEN s.price ELSE NULL END) AS Option 3,
       MAX(CASE WHEN s.code = 'Option 4' THEN s.price ELSE NULL END) AS Option 4
FROM main_itempage i JOIN
     main_sales s
     ON i.id = s.item_id
WHERE i.id = '[item''s id]' AND
      s.territory_id = 'US' and
      date BETWEEN '2018-01-01' AND '2018-12-31'
GROUP BY date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...