pivot查询不在mysql上执行

pivot查询不在mysql上执行,mysql,sql,Mysql,Sql,关于这一点 我设法得到了这个准备好的pivot查询 SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'count(IF(name = ''', name, ''', 1, NULL)) AS ', name ) ) INTO @sql FROM bundles; SET @sql = CONCAT('SELECT ', @sql, ' FROM bundles'); PR

关于这一点 我设法得到了这个准备好的pivot查询

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
    CONCAT(
      'count(IF(name = ''',
     name,
      ''', 1, NULL)) AS ',
      name
    )
  ) INTO @sql
FROM bundles;
SET @sql = CONCAT('SELECT ', @sql, ' FROM bundles');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
这里有一个现场演示

问题是,当我尝试使用mysql5.6.14 Win32 x86在具有相同模式的数据上执行该操作时,会出现错误

错误 SQL查询:

从@sql准备stmt

MySQL说:

1064-

只是一个错误代码,但没有消息。。 我读过很多问题,比如&但是答案是静态的,不适用于未知的列
首先,这在mysql中是否可用。。欢迎使用任何指针

您的模式可能相同,但数据可能不同。您的值中可能有导致问题的关键字、空格或其他内容。尝试用双引号将别名括起来

这是我对你的评论的编辑。我添加了一行输出动态SQL,以防您需要使用数据检查系统上的内容

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'count(IF(name = ''',
     name,
      ''', 1, NULL)) AS "',
      name, '"'
    )
  ) INTO @sql
FROM bundles;
SET @sql = CONCAT('SELECT ', @sql, ' FROM bundles');
SELECT CONCAT(@sql);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

也许从bundle中选择不同的名称会返回单个引号/撇号或其他不需要的字符?这是一个反小提琴:它产生了一个类似的错误。@ebyrob实际上我在执行过程时得到了错误。我的观点是,我想在bundle中的name列中可能有一个引号。这肯定会使您正在构建的动态查询的语法无效。