2017-02-17 3 views
0

Я попытался MySQL ststement для dinamically rows to column по последующим here с утверждением запроса:GROUP_CONCAT ошибка MySQL заявление

SET @sql = NULL; 
SELECT 
GROUP_CONCAT(DISTINCT 
    CONCAT(
    'MAX(CASE WHEN col = ''', 
    col, 
    ''' THEN val END) as `', 
    col, '`' 
) 
)INTO @sql 
FROM 
(
    SELECT A.id_a, D.id_c id_c, 
      C.students students, 
      CONCAT(B.`code`, '_', A.id_a) col, 
      CONCAT(D.value_m, ',', D.value_n) val 
    FROM table_a A 
     INNER JOIN table_d D ON A.id_a =D.id_a 
     INNER JOIN table_b B ON D.id_b=B.id_b 
     INNER JOIN table_c C ON D.id_c=C.id_c 
)dd; 

SET @sql = CONCAT('SELECT id_c, students,', @sql, ' 
     FROM(
      SELECT A.id_a, D.id_c id_c, 
       C.students students, 
       CONCAT(B.`code`, '_', A.id_a) col, 
       CONCAT(D.value_m, ',', D.value_n) val 
      FROM table_a A 
       INNER JOIN table_d D ON A.id_a =D.id_a 
       INNER JOIN table_b B ON D.id_b=B.id_b 
       INNER JOIN table_c C ON D.id_c=C.id_c 
     )dd 
     GROUP BY id_c' 
    ); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

с результатом сообщения:

Query OK, 0 rows affected 
Query OK, 1 row affected 
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '', A.id_a) col, 
      CONCAT(D.value_m, ',', D.value_n) val 
     FROM table_a A ' at line 1 
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MAX(CASE WHEN col = 'MAT_1' THEN val END) as `MAT_1`,MAX(CASE WHEN col = 'BIO_1'' at line 1 
1243 - Unknown prepared statement handler (stmt) given to EXECUTE 
1243 - Unknown prepared statement handler (stmt) given to DEALLOCATE PREPARE 

Я не знаком с SQL заявления, как это, и что не так с этим SQL QUERY

Спасибо ...

ответ

1

Если вы посмотрите на код (и увеличение):

SET @sql = CONCAT('SELECT id_c, students,', @sql, ' 
     [..] 
       CONCAT(B.`code`, '_', A.id_a) col, 
       CONCAT(D.value_m, ',', D.value_n) val 
     [..] 
     GROUP BY id_c' 
    ); 

вы увидите, что _ и , черные, в то время как они должны быть красными, как часть строки. Это означает, что ваша строка «сломана». Так что вам нужно, чтобы избежать одиночные кавычки с '':

SET @sql = CONCAT('SELECT id_c, students,', @sql, ' 
     [..] 
       CONCAT(B.`code`, ''_'', A.id_a) col, 
       CONCAT(D.value_m, '','', D.value_n) val 
     [..] 
     GROUP BY id_c' 
    ); 

Или использовать двойные кавычки для строк, которые содержат одиночные кавычки:

SET @sql = CONCAT('SELECT id_c, students,', @sql, " 
     [..] 
       CONCAT(B.`code`, '_', A.id_a) col, 
       CONCAT(D.value_m, ',', D.value_n) val 
     [..] 
     GROUP BY id_c" 
    ); 

Теперь вся строка красного цвета, как это должно быть :-)

http://rextester.com/SLMU41976

+0

ОК Ницца ... Я не вижу «сломанных» там :-) ... Спасибо .. – Anz