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也许你可以帮助我。看看这个: