MySQL动态透视行到列
我有一张桌子:一天MySQL动态透视行到列,mysql,pivot,Mysql,Pivot,我有一张桌子:一天 id | jour 1 Lundi 01 Août 2016 2 Mardi 02 Août 2016 3 Mercredi 03 Août 2016 4 Jeudi 04 Août 2016 我希望输出50行,如下所示: Lundi 01 Août 2016 Mardi 02 Août 2016 Mercredi 03 Août 2016 1 2 3 您可以很容易地处理这
id | jour
1 Lundi 01 Août 2016
2 Mardi 02 Août 2016
3 Mercredi 03 Août 2016
4 Jeudi 04 Août 2016
我希望输出50行,如下所示:
Lundi 01 Août 2016 Mardi 02 Août 2016 Mercredi 03 Août 2016
1 2 3
您可以很容易地处理这些查询:首先生成查询,然后作为准备好的语句执行它
SET SESSION group_concat_max_len = 1000000;
SELECT
CONCAT('SELECT ',
GROUP_CONCAT(
CONCAT (
"MAX(IF(`jour` = '",jour,'\',id,NULL)) AS `',jour,'`'
)
),
' FROM `day`'
) INTO @SQL
FROM
( SELECT *
FROM `day`
ORDER BY id
LIMIT 1,2
) AS data;
select @SQL; -- see the query only for debug
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
样品
您可以很容易地处理这些查询:首先生成查询,然后作为准备好的语句执行它
SET SESSION group_concat_max_len = 1000000;
SELECT
CONCAT('SELECT ',
GROUP_CONCAT(
CONCAT (
"MAX(IF(`jour` = '",jour,'\',id,NULL)) AS `',jour,'`'
)
),
' FROM `day`'
) INTO @SQL
FROM
( SELECT *
FROM `day`
ORDER BY id
LIMIT 1,2
) AS data;
select @SQL; -- see the query only for debug
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
样品
那么,您希望每月的每一天都以单独的列为轴心吗?我认为您需要动态SQL来实现这一点,如果没有其他原因,每个月都可以有可变的天数。可能是重复的,那么您希望每月的每一天都被透视到一个单独的列中吗?我认为您需要动态SQL来实现这一点,如果没有其他原因,每个月都可以有一个可变的天数。可能重复@SQL中的PREPARE stmt give error 1064-您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以获取第行中接近“NULL”的正确语法1@SunilDabhi-执行此设置会话组\u concat\u max\u len=1000000;在第一个查询之前。生成的字符串可能比默认值长。@Sunil Dabi-您是否可以发布select@SQL execute it的输出,而不是准备查看生成的查询。我在我的回答中加入了我可以在这个查询中添加0、50和按id排序的限制吗?@Bernd Buffen也许你可以帮助我。看看这个:从@sqlgiveerror1064准备stmt-您的SQL语法中有一个错误;检查与MySQL服务器版本相对应的手册,以获取第行中接近“NULL”的正确语法1@SunilDabhi-执行此设置会话组\u concat\u max\u len=1000000;在第一个查询之前。生成的字符串可能比默认值长。@Sunil Dabi-您是否可以发布select@SQL execute it的输出,而不是准备查看生成的查询。我在我的回答中加入了我可以在这个查询中添加0、50和按id排序的限制吗?@Bernd Buffen也许你可以帮助我。看看这个: