我已尝试过关于动态旋转的每个拟合答案,并且在执行代码时我总是会遇到以下错误:
QueryException:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在'SET @sql = CONCAT('SELECT day,',@ sql,'FROM my_table GROUP BY day')附近使用正确的语法; '在第6行
我正在安装MYSQL 5.1.63的Amazon AWS上工作,我准备好的语句是以下代码:
SET @sql = NULL;
SELECT GROUP_CONCAT(
DISTINCT CONCAT('MAX(case when user = ''', user, ''' then hours end)
AS ', user))
INTO @sql
FROM my_table;
SET @sql = CONCAT('SELECT day , ', @sql, '
FROM my_table
GROUP BY day');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我的观点如下:
day user task hours
monday user1 wash 3
monday user2 clean 2
monday user3 iron 4
tuesday user1 clean 4
tuesday user2 iron 1
tuesday user3 wash 3
并应动态调整到此:
day user1 user2 user3
monday 3 2 4
tuesday 4 1 3
我尝试逐位执行查询,这样就会出现'prepare'-line错误:
QueryException:您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在'1 FROM eee_alltime GROUP BY mon'附近使用正确的语法 在第7行 查询是:sql:'PREPARE stmt FROM @sql;
任何人都知道我做错了什么?
我在同一个数据库上的表(不是视图)上尝试了代码,它也无法工作,我无法在Fiddle上重现错误。
答案 0 :(得分:1)
我发现在'user'列中,一个条目为'1',产生错误。
@avisheks:我能够在fiddle中重现错误并通过在select语句中添加where子句来解决,因为我只希望列出包含'user'的用户名:
SET @sql = NULL;
SELECT GROUP_CONCAT(
DISTINCT CONCAT('MAX(case when user = ''', user, ''' then hours end)
AS ', user))
INTO @sql
FROM my_table WHERE user LIKE '%user%';
SET @sql = CONCAT('SELECT day , ', @sql, '
FROM my_table
GROUP BY day');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
看看fiddle。 非常感谢avisheks和bluefeet让我使用小提琴进行错误复制!