Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SO对动态数据透视的回答导致“SQL Synthax中的错误”_Mysql_Dynamic_Pivot - Fatal编程技术网

Mysql SO对动态数据透视的回答导致“SQL Synthax中的错误”

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(

我尝试过动态旋转的每一个合适的答案,在一次执行代码时,我总是会出现以下错误:

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”行中:

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:无论我使用三个、两个还是一个引号,错误消息都不会改变。还有什么建议吗?