Я написал запрос, который выглядит так:
SELECT
id,
product_name,
CASE WHEN by_month = 'January 2018' THEN total_sales ELSE 0 END AS january_2018,
CASE WHEN by_month = 'February 2018' THEN total_sales ELSE 0 END AS february_2018,
CASE WHEN by_month = 'March 2018' THEN total_sales ELSE 0 END AS march_2018,
CASE WHEN by_month = 'April 2018' THEN total_sales ELSE 0 END AS april_2018
FROM (
SELECT
mnth,
id,
product_name,
CASE WHEN mnth = '2018-01-01' THEN 'January 2018'
WHEN mnth = '2018-02-01' THEN 'February 2018'
WHEN mnth = '2018-03-01' THEN 'March 2018'
WHEN mnth = '2018-04-01' THEN 'April 2018' END AS by_month,
SUM(sales) total_sales
FROM (
SELECT
date_trunc('month', event_date) mnth,
id,
product_name,
SUM(sales) sales
FROM
table1
WHERE event_date BETWEEN '2017-01-01' AND '2018-04-30'
1,2,3)
WHERE sales > 0
GROUP BY
1,2,3,4)
GROUP BY
1,2, by_month, total_sales
Но это дает очень фрагментированный результат, который выглядит следующим образом
id product_name january_2018 february_2018 march_2018 april 2018
123 abc 500 0 0 0
123 abc 0 700 0 0
123 abc 0 0 900 0
123 abc 0 0 0 100
Я хотел бы исключить результаты «0» (я знаю, что это то, что я намеренно добавил в утверждение ELSE
, но мне понадобился заполнитель.
Я бы хотел, чтобы результаты выглядели так.
id product_name january_2018 february_2018 march_2018 april 2018
123 abc 500 700 900 100
Как это можно сделать? Это будет что-то в операторе ELSE
или другой подзапрос? Или что-то еще?