重新排列 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 重新排列列?
您应该在 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;
我正在尝试进行数据透视以将某些行作为列。我使用此语句可以正常工作:
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 重新排列列?
您应该在 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;