2015-02-19 9 views
0

У меня есть модель с несколькими типами и пытается отобразить вывод, где столбец одной таблицы становится строкой на выходе.Преобразование столбцов в строки: MySQL

У меня есть 3 таблицы - 1 Таблица данных, 1 таблица метаданных и таблица расширений.

Вот мой запрос:

set @sql=NULL; 
SELECT group_concat(CONCAT( 
    'MAX(If(EXTLABEL = ''', EXTLABEL, ''', VALUE, NULL)) AS ',EXTLABEL)) 
    into @sql 
FROM TENANT_METADATA, TENANT_EXTENSIONTABLE 
WHERE TENANT_METADATA.EXTENSION_ID = TENANT_EXTENSIONTABLE.EXTENSION_ID; 

SET @sql=CONCAT('SELECT TENANT_NAME AS TENANT_TABLE, ', @sql, ' 
       FROM TENANT_DATATABLE, TENANT_METADATA, TENANT_EXTENSIONTABLE 
       WHERE TENANT_DATATABLE.RECORD_ID=TENANT_EXTENSIONTABLE.RECORD_ID 
       AND TENANT_METADATA.EXTENSION_ID = TENANT_EXTENSIONTABLE.EXTENSION_ID 
       group by TENANT_DATATABLE.TENANT_NAME'); 
PREPARE stmt FROM @sql; 
Execute stmt; 
DEALLOCATE prepare stmt; 

В моем выходе, мне нужно имена столбцов, как «Tenant_Table, ExtLABEL1, ExtLABEL2, ExtLABEL3 и т.д. и поле VALUE должно отображать значения для EXTLABEL столбцов

.

Мой запрос, кажется, извлекает правильное значение из другой таблицы, но когда я выполняю команду Prepare stmt, он говорит, что у меня есть синтаксическая ошибка, но я не могу идентифицировать ошибку. Любая помощь будет действительно оценена. Спасибо.

+0

Пожалуйста, покажите нам свою синтаксическую ошибку. –

+0

Это то, что я получаю: 12: 42: 53 \t PREPARE stmt FROM @sql \t Код ошибки: 1064. У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего MySQL-сервера, для правильного синтаксиса для использования рядом с)) AS ID, MAX (If (EXTLABEL = 'DESCRIPTION', VALUE = 'Design Data Models')) AS DESC 'в строке 1 \t 0.000 sec – Katie

+0

Это сообщение об ошибке соответствует коду, отправленному в вашем вопросе? –

ответ

0

Колонны к строкам: UNION ALL

(SELECT Tenant_Table, 1, ExtLABEL1 AS EXTLABEL FROM ...) 
UNION ALL 
(SELECT Tenant_Table, 2, ExtLABEL2 AS EXTLABEL FROM ...) 
UNION ALL 
(SELECT Tenant_Table, 3, ExtLABEL3 AS EXTLABEL FROM ...) 
ORDER BY 1,2; 
Смежные вопросы