参考此 [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中使用吗? ..赞赏任何指针
答案 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;