2017-02-17 6 views
0

Ich habe versucht, mysql ststement für dinamically rows to column gefolgt von here mit Abfrageanweisung:GROUP_CONCAT MySQL-Anweisung Fehler

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; 

mit Ergebnismeldung:

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 

ich mit SQL-Anweisung wie folgt nicht vertraut bin, und was ist falsch mit diesem SQL QUERY

Dank ...

Antwort

1

Wenn Sie Ihren Code zu buchen (und vergrößern):

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' 
    ); 

Sie werden sehen, dass _ und , schwarz sind, während sie als Teil der Zeichenfolge rot sein sollte. Das bedeutet, dass deine Saite dort "kaputt" ist. So müssen Sie die einfachen Anführungszeichen mit '' entkommen:

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' 
    ); 

Oder verwenden Sie doppelte Anführungszeichen für Strings, die einfache Anführungszeichen enthalten:

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" 
    ); 

Nun ist die komplette Zeichenfolge ist rot wie es :-)

sein sollte

http://rextester.com/SLMU41976

+0

OK Schön ... ich sehe nicht "kaputt" dort :-) ... Danke .. – Anz