У меня такой же сценарий, как у меня в MySQL или PHP. Преобразование строк в столбцы
Но теперь мне нужно перестроить таблицу, и это результат
Это почти то же самое со ссылкой выше, но я должен включить AS_amount.anyone может мне помочь?
Я хочу получить результат ниже, но с AS_month_2016 … и т.д. в правой части каждого FA_mont2016
Это мой код:
CREATE DEFINER=`root`@`localhost` PROCEDURE `display_annualize_table`() BEGIN SET group_concat_max_len=10028; SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(month = ''', month, ''' and year(date) = ', year(date), ', FS_amount, NULL)) AS `', CONCAT('FA_',month), '_', year(date), '`') order by date ) INTO @sql FROM tmp_results; if coalesce(@sql,'') != '' then set @sql = concat(', ', @sql); end if; SET @sql = CONCAT( 'SELECT r.account as Account, r.region as Region ', coalesce(@sql,''), 'FROM tmp_results r LEFT JOIN accounts AS a on r.account_id = a.id GROUP BY r.account, r.region ORDER By r.account_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END
Нужна ваша помощь, пожалуйста. Заранее спасибо!
Он работает так же, как FS_amount
, просто добавьте новые столбцы в свой код, который генерирует динамические столбцы:
SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(month = ''', month, ''' and year(date) = ', year(date), ', FS_amount, NULL)) AS `', CONCAT('FA_',month), '_', year(date), '`, ', 'MAX(IF(month = ''', month, ''' and year(date) = ', year(date), ', AS_amount, NULL)) AS `', CONCAT('AS_',month), '_', year(date), '`' ) order by date ) INTO @sql FROM tmp_results;
Вы должны взглянуть на код, созданный операторами (например, путем временного добавления select @sql;
), хотя должно быть довольно просто добавить еще больше столбцов, если они вам понадобятся.