Mysql SO对动态数据透视的回答导致“SQL Synthax中的错误”
我尝试过动态旋转的每一个合适的答案,在一次执行代码时,我总是会出现以下错误: QueryException:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解可在“SET@sql=CONCAT‘SELECT day’,@sql‘FROM my_table GROUP BY day’附近使用的正确语法; “在6号线 我正在使用安装了MYSQL 5.1.63的Amazon AWS,我准备的声明如下:Mysql SO对动态数据透视的回答导致“SQL Synthax中的错误”,mysql,dynamic,pivot,Mysql,Dynamic,Pivot,我尝试过动态旋转的每一个合适的答案,在一次执行代码时,我总是会出现以下错误: 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(
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”行中:
QueryException:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解可在“1 FROM eee_alltime GROUP BY mon”附近使用的正确语法
在7号线
查询为:sql:'从@sql准备stmt
有人知道我做错了什么吗
我在同一数据库中的表而不是视图上尝试了代码,它也不起作用,我无法在Fiddle上重现错误。我发现在“user”列中有一个条目是产生错误的“1” @Aviseks:我能够重现中的错误,并通过在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;
看一看。
非常感谢Avishek和bluefeet让我使用fiddle进行错误复制 您使用的语法似乎是MySQL,但您已经用MySQL和SQL Server标记了它。你在使用什么数据库?我还建议首先将查询编写为静态版本,然后将其转换为动态SQL,以确保语法正确。这将有助于解决一些问题。我认为这行代码与以下代码有关:DISTINCT CONCAT'MAXcase when user=',user',然后hours end,两边都使用了额外的引号。@juergen d:谢谢编辑。@BlueFoots我已经在我的。但老实说,这并不能解决我的问题。@Avisheeks:无论我使用三个、两个还是一个引号,错误消息都不会改变。还有什么建议吗?