2016-11-10 4 views
2

У меня есть один и тот же сценарий, что я имею в MySQL or PHP Transform rows to columnsMysql MySQL или PHP Преобразование строк в двух столбцах динамически

Но я должен перестроить свою таблицу сейчас, и это выход

enter image description here

Это в значительной степени то же самое со ссылкой выше, но я должен включить AS_amount.anyone может мне помочь?

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

enter image description here

Это мой код:

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 

Нужна ваша помощь, пожалуйста. Заранее спасибо!

+0

у них такой же код, как у меня. – Dhenn

+0

Я поднял ваш вопрос, спасибо, что показал усилие. –

ответ

1

Это работает точно так же, как 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;), хотя должно быть довольно прямо, чтобы добавить еще больше столбцов, если они вам понадобятся.

+0

Привет, Solarflare, к сожалению, я столкнулся с ошибкой при выполнении этого кода: Код ошибки: 1064. У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' FA_November_202FROM tmp_results r LEFT JOIN accounts AS a on r.accoun 'по строке 2 – Dhenn

+0

О, я понял. Мне нужно увеличить max_concat_len. Спасибо дружище! :) – Dhenn

Смежные вопросы