Мне нужно отображать по одной строке для каждой комбинации портфель / акция, показывая оплату за каждый месяц, поэтому, если компания платит дважды в год в мае и сентябре соответственно 441 и 215, это будет показано в одной строке.В настоящее время мой запрос выводит строку для каждого платежа со столбцами Янв - Дек
Я пытался использовать подзапрос безрезультатно, у меня заканчиваются идеи о том, как этого добиться.
SELECT
s.symbol AS Symbol,
p.code AS Portfolio,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Jan' then IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Jan,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Feb' then IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Feb,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Mar' then IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Mar,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Apr' then IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Apr,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'May' then IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS May,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Jun' then IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Jun,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Jul' then IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Jul,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Aug' then IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Aug,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Sep' then IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Sep,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Oct' then IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Oct,
(case when ANY_VALUE(DATE_FORMAT(d.pdate,'%b')) = 'Nov' then IFNULL(CEILING((SUM(IF(t.transaction_type='Buy',t.quantity,t.quantity * -1)) * ANY_VALUE(d.dividend) ) / 100),0) end) AS Nov
FROM
dm_transactions t
INNER JOIN dm_dividends d ON (d.stock_id = t.stock_id)
INNER JOIN dm_stocks s ON (s.id = t.stock_id)
INNER JOIN dm_portfolios p ON (t.portfolio_id = p.id)
WHERE
ANY_VALUE(d.pdate) >= CURDATE()
AND
p.code = 'SFT_DEA_CO'
AND
s.symbol = 'AV..L'
AND
t.user_id =2
GROUP BY
s.symbol, d.pdate
Вывод
Symbol Portfolio Jan Feb Mar Apr May Jun Jul Aug Sep Oct
AV..L SFT_DEA_CO NULL NULL NULL NULL 441 NULL NULL NULL NULL NULL
AV..L SFT_DEA_CO NULL NULL NULL NULL NULL NULL NULL NULL 215 NULL
Требуется вывод ниже
Symbol Portfolio Jan Feb Mar Apr May Jun Jul Aug Sep Oct
AV..L SFT_DEA_CO 441 215
Мне требуется одна строка для данного символа, портфолио и без значений NULL.
Любая помощь оченьоценил.
Спасибо
Колин