Я пытаюсь следовать примеру с этого сайта: http://vitobotta.com/mysql-generate-column-names-dynamically-from-row-values/MySql Подготовлено заявление для преобразования значения строки в Колонном
У меня есть таблица вроде этого:
+------------+--------------+----------+-------------+
| MessageId | ProcessDate | FieldName | FieldValue |
+------------+--------------+-----------+------------+
| 18 | 2015-12-04 | data | 101110101 |
| 18 | 2015-12-04 | type | binary |
| 19 | 2015-12-04 | type | integer |
| 19 | 2015-12-04 | data | 34 |
+------------+--------------+-----------+------------+
То, что я хочу что-то как это:
+------------+--------------+----------+-------------+
| MessageId | ProcessDate | type | data |
+------------+--------------+-----------+------------+
| 18 | 2015-12-04 | binar | 101110101 |
| 19 | 2015-12-04 | integer | 34 |
+------------+--------------+-----------+------------+
Мой код:
DROP TABLE IF EXISTS tmp_results;
CREATE TEMPORARY TABLE tmp_results AS
SELECT r.`MessageId`, r.`ProcessDate`, r.`TransportType`, d.`FieldName`, d.`FieldValue`
FROM
returnmessages r, decodedmessagessummaryrecord s, decodedmessagesdetailrecord d
WHERE r.`Id` = s.`ReturnMessagesId`
AND s.`Id` = d.`DecodedMessagesSummaryRecordId`
AND r.`MobileId` = "35"
LIMIT 10;
SELECT CONCAT('
SELECT MessageId, ProcessDate, TransportType, ', field_value, '
FROM tmp_results'
)
INTO @variable1
FROM
(SELECT GROUP_CONCAT(CONCAT('IFNULL(MAX(CASE WHEN FieldName=''',field_name,''' THEN FieldValue
END), ''-'' AS "', col_name,'"')) field_value
FROM(
SELECT field_name, field_name as col_name
FROM(SELECT DISTINCT FieldName AS field_name FROM tmp_results) AS fieldnames
) field_with_col_names
) result;
PREPARE prepstate FROM @s;
EXECUTE prepstate;
DEALLOCATE PREPARE prepstate;
который возвращает ошибку:
Error Code: 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 'FROM tmp_results' at line 3
Я не совсем уверен, что это происходит не так в этой точке.
Оставьте пространство перед FROM ' 'FROM tmp_results'', так как он будет непосредственно приклеить к значению, прежде чем – Mihai
я попытался добавить пространство, но это, кажется, не уважать его. Я все еще получаю ту же ошибку. 'SELECT CONCAT (' SELECT MessageId, ProcessDate, TransportType,', field_value, 'FROM tmp_results' )' – RTinkess31
sqlfiddle некоторые примеры данных – Mihai