pivot查询不在mysql上执行

时间:2014-07-09 15:21:53

标签: mysql sql

参考此 [pivot article] 我设法得到这个准备好的透视查询

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;

这是一个现场演示SQLfiddle

问题是,当我尝试使用mysql(5.6.14 Win32 x86)使用相同的模式在我的数据上执行该操作时,我收到错误。

  

错误
  SQL查询:

     

PREPARE stmt FROM @sql;

     MySQL说:

     

#1064 -

只是错误代码但没有消息..
我读过像this& this但答案是静态方式,不适用于未知列 首先,这甚至可以在mysql中使用吗? ..赞赏任何指针

1 个答案:

答案 0 :(得分:1)

您的架构可能相同,但您的数据可能不同。您的值中可能包含导致问题的关键字,空格或其他内容。尝试用双引号包装你的别名。

这是我对SQLFiddle的修改。我添加了一行输出动态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;