重新排列 MYSQL 数据透视 select 中的行

Rearranging rows in MYSQL pivot select

我正在尝试进行数据透视以将某些行作为列。我使用此语句可以正常工作:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when year = ',
      year,
      ' then experience_rate end) AS `',
      year, '-Pen`'
    )
  ) INTO @sql
FROM
  spooner_pec order by year asc;
SET @sql = CONCAT('SELECT policy_number, primary_name, ', @sql, ' 
                  FROM spooner_pec 
                   GROUP BY policy_number');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

唯一的问题是,如果年份在行中乱序,那么它们在列中也乱序。有什么方法可以用 select 重新排列列?

SQLFiddle

您应该在 group_concat 中添加 order by year:

select
  group_concat(distinct
    concat(
      'max(case when year = ',
      year,
      ' then experience_rate end) AS `',
      year, '-Pen`'
    )
    order by year          
  ) into @sql
from
  spooner_pec;

SQLFiddle