2017-02-17 107 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