mysql数据透视表语法错误
mysql说我的代码有语法错误。有人能告诉我它在哪里吗mysql数据透视表语法错误,mysql,pivot-table,Mysql,Pivot Table,mysql说我的代码有语法错误。有人能告诉我它在哪里吗 SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(CASE WHEN uploaddate = ''', uploaddate, ''' THEN points END) `', uploaddate, '`')) INTO @sql FROM prepress.imsexport; SET @sql = CONCAT('SELECT uploadedby, ', @sq
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN uploaddate = ''', uploaddate,
''' THEN points END) `', uploaddate, '`'))
INTO @sql
FROM prepress.imsexport;
SET @sql = CONCAT('SELECT uploadedby, ', @sql, '
FROM prepress.imsexport
GROUP BY uploadedby');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我还想在uploaddate上使用date_格式如何在不破坏concat函数的情况下做到这一点
mysql说我的代码有语法错误。有人能告诉我它在哪里吗
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN uploaddate = ''', uploaddate,
''' THEN points END) `', uploaddate, '`'))
INTO @sql
FROM prepress.imsexport;
SET @sql = CONCAT('SELECT uploadedby, ', @sql, '
FROM prepress.imsexport
GROUP BY uploadedby');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
乍一看,您的代码看起来不错
*我还想在uploaddate上使用date_格式如何在不破坏concat函数的情况下做到这一点*
如果每个日期上载的每个可能有多行,则您很可能打算使用SUM()
而不是MAX()
下面是使用DATE\u FORMAT()
的代码的外观
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('SUM(CASE WHEN DATE(uploaddate) = ''', DATE(uploaddate),
''' THEN points END) `', DATE_FORMAT(uploaddate, '%m/%d/%Y'), '`'))
INTO @sql
FROM imsexport;
SET @sql = CONCAT('SELECT uploadedby, ', @sql, '
FROM imsexport
GROUP BY uploadedby');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
输出:
| UPLOADEDBY | 01/01/2013 | 01/02/2013 | 01/03/2013 | 01/04/2013 |
|------------|------------|------------|------------|------------|
| Bob | 1 | 2 | 1 | 3 |
| Sue | 4 | 2 | (null) | 2 |
|上传日期:2013年1月1日至2013年2月1日至2013年3月1日至2013年4月1日|
|------------|------------|------------|------------|------------|
|鲍勃| 1 | 2 | 1 | 3|
|苏| 4 | 2 |(空)| 2|
这里是演示
下面是使用mysql控制台执行的情况
mysql> SET @sql = NULL;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> SELECT GROUP_CONCAT(DISTINCT
-> CONCAT('SUM(CASE WHEN DATE(uploaddate) = ''', DATE(uploaddate),
-> ''' THEN points END) `', DATE_FORMAT(uploaddate, '%m/%d/%Y'), '`'))
-> INTO @sql
-> FROM imsexport;
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> SET @sql = CONCAT('SELECT uploadedby, ', @sql, '
'> FROM imsexport
'> GROUP BY uploadedby');
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> PREPARE stmt FROM @sql;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE stmt;
+------------+------------+------------+------------+------------+
| uploadedby | 01/01/2013 | 01/02/2013 | 01/03/2013 | 01/04/2013 |
+------------+------------+------------+------------+------------+
| Bob | 1 | 2 | 1 | 3 |
| Sue | 4 | 2 | NULL | 2 |
+------------+------------+------------+------------+------------+
2 rows in set (0.01 sec)
mysql> DEALLOCATE PREPARE stmt;
Query OK, 0 rows affected (0.00 sec)
mysql>SET@sql=NULL;
查询正常,0行受影响(0.00秒)
mysql>
mysql>选择组_CONCAT(不同
->CONCAT('SUM(如果日期(上传日期)='',日期(上传日期)),
->''THEN points END)`',DATE_格式(上载日期'%m/%d/%Y'),'`'))
->进入@sql
->来自imsexport;
查询正常,1行受影响(0.00秒)
mysql>
mysql>SET@sql=CONCAT('SELECT uploadedby',@sql,'
“>来自imsexport
“>按上载者分组”);
查询正常,0行受影响(0.00秒)
mysql>
mysql>从@sql准备stmt;
查询正常,0行受影响(0.00秒)
编写的声明
mysql>执行stmt;
+------------+------------+------------+------------+------------+
|上传日期:2013年1月1日至2013年2月1日至2013年3月1日至2013年4月1日|
+------------+------------+------------+------------+------------+
|鲍勃| 1 | 2 | 1 | 3|
|苏| 4 | 2 |空| 2|
+------------+------------+------------+------------+------------+
一组2行(0.01秒)
mysql>解除分配准备stmt;
查询正常,0行受影响(0.00秒)
发布准确的错误消息和准确的表模式SHOW CREATE table imsexport代码>上传日期的数据类型是什么(日期、日期时间、时间戳、整数)?您是否总是有一行用于按每个uploaddate
上传的uploaddate
?创建表imsexport(id
int,uploadedby
varchar(255),uploaddate
varchar(255),points
int(11));在imsexport(id
,uploadby
,uploaddate
,点
)中插入值(1,'Bob','2013-01-01 12:30:00','1'),(2,'Bob','2013-01-02 06:05:00','2'),(3,'Bob','2013-01-03 14:25:00','1'),(4,'Bob','2013-01-04 15:30','3'),(5,'Sue','2013-01-01-01-01:00:00','1',',(6,“苏”,“2013-01-01 00:45:00”,“3”),(7,“苏”,“2013-01-02 16:20:00”,“2”),(8,“苏”,“2013-01-04 17:10:00”,“2”);错误SQL查询:从@SQL准备stmt;MySQL说:文档#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,在第2行的“FROM imsexport GROUP BY uploadedby”附近使用正确的语法------>这是MySQL错误有什么特别的原因上载日期
是VARCHAR
类型,而不是DATETIME
?您使用什么客户端工具来执行此代码?#1064-您的SQL语法有错误;请检查与MySQL服务器版本对应的手册,以获得在第1行的“从imsexport组上传20”附近使用的正确语法----->现在这是错误所在wing Up注释掉以PREPARE
开头的三条语句,并使用这条语句来代替SELECT@sql;
,然后发布结果。您是否看过我根据示例数据提供的正在工作的SQLFIDLE示例?我看过了,这就是为什么我不明白为什么在我的表上应用它时它不起作用的原因。很可能您的表中有一些垃圾uploaddate
列。我要求您发布SELECT@sql;
的结果,它将显示问题。您仍然没有回答如何执行此代码(mysql cli、phpmyadmin、客户端代码,具体是什么?)