2016-11-10 7 views
2

私はMySQL or PHP Transform rows to columnsMySQLのMySQLやPHP動的に2列に行を変換

に持っていると私は同じシナリオを持っている。しかし、私は今、私のテーブルを再構築する必要があり、これがそれだ出力

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"の近くで使用されていることを確認してください。2行目の "r.accoun上のLEFT JOINアカウント"を参照してください。 – Dhenn

+0

ああ、 max_concat_lenを増やす必要があります。ありがとう! :) – Dhenn

関連する問題