2014-01-24 3 views
0

mysql говорит, что у меня есть синтаксическая ошибка для этого кода. может ли кто-нибудь сказать мне, где это?ошибка синтаксиса таблицы mysql 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; 

Я также хочу использовать date_format на uploaddate, как я могу это сделать без завинчивания функции Concat?

+0

Сообщение точное сообщение об ошибке и точная схема таблицы 'SHOW CREATE TABLE imsexport;' тип – peterm

+0

Какие данные 'uploaddate' имеет (дата, DateTime, метки времени, INT)? У вас всегда есть одна строка для 'uploaded' на' uploaddate'? – peterm

+0

CREATE TABLE imsexport \t ('id' int,' uploadedby' varchar (255), 'uploaddate' varchar (255),' points' int (11)) ; \t INSERT INTO imsexport \t ('id',' uploadedby', 'uploaddate',' points') ЗНАЧЕНИЯ \t (1, 'Боб', '2013-01-01 12:30:00', ' 1 '), \t (2,' Bob ',' 2013-01-02 06:05:00 ',' 2 '), \t (3,' Bob ',' 2013-01-03 14:25: 00 ',' 1 '), \t (4,' Bob ',' 2013-01-04 15:30:00 ',' 3 '), \t (5,' Sue ',' 2013-01-01 00:00:00 ',' 1 '), \t (6,' Sue ',' 2013-01-01 00:45:00 ',' 3 '), \t (7,' Sue ',' 2013 -01-02 16:20:00 ',' 2 '), \t (8, 'Sue', '2013-01-04 17:10:00', '2') ; – rain

ответ

0

mysql says У меня есть синтаксическая ошибка для этого кода. Может ли кто-нибудь сказать мне, где это?

На первый взгляд ваш код выглядит хорошо.

* Я также хочу использовать date_format на uploaddate, как я могу это сделать без завинчивания функцию Concat? *

Вы, скорее всего, имел в виду использовать SUM() вместо MAX() если может быть несколько строк за uploadedby за день.

Вот как ваш код с DATE_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 | 

Вот SQLFiddle демо


Вот как это будет выглядеть выполняется с использованием mys QL консоль

 
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) 
+0

# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с ''20 FROM imsexport GROUP BY uploadedby' в строке 1 ----> теперь это ошибка, которая отображается – rain

+0

Прокомментируйте три утверждения начиная с 'PREPARE' и использовать этот вместо« SELECT @sql; »и опубликовать результат. – peterm

+0

Вы посмотрели рабочий пример sqlfiddle, который я представил на основе ваших данных образца? – peterm

Смежные вопросы