К сожалению, у MySQL нет функции PIVOT, которая преобразует строки в столбцы, поэтому вам нужно будет использовать агрегатную функцию с выражением CASE.
Основной синтаксис запроса будет, если у вас есть ограниченное или известное количество столбцов:
select bank_name,
sum(case when month_year ='10/2011' then payment_sum else 0 end) `10/2011`,
sum(case when month_year ='11/2011' then payment_sum else 0 end) `11/2011`,
sum(case when month_year ='12/2011' then payment_sum else 0 end) `12/2011`
from
(
select bank_name,
payment_sum,
CONCAT(MONTH(payment_due_date), '/', YEAR(payment_due_date)) as month_year
from bank
join finance
on bank.bank_id = finance.bank_id
) d
group by bank_name;
Но для вашей ситуации, это звучит, как вы будете иметь неизвестное количество дат, так что вы могли бы необходимо использовать подготовленное заявление для создания динамического sql:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'sum(case when month_year = ''',
CONCAT(MONTH(payment_due_date), '/', YEAR(payment_due_date)),
''' then payment_sum end) AS `',
CONCAT(MONTH(payment_due_date), '/', YEAR(payment_due_date)), '`'
)
) INTO @sql
from finance;
SET @sql
= CONCAT('SELECT bank_name, ', @sql, '
from
(
select bank_name,
payment_sum,
CONCAT(MONTH(payment_due_date), ''/'', YEAR(payment_due_date)) as month_year
from bank
join finance
on bank.bank_id = finance.bank_id
) d
group by bank_name;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;