列转换为行:MySQL

时间:2015-02-19 20:30:29

标签: mysql prepared-statement concat

我有一个多租户模型并尝试显示输出,其中一个表的列在输出中成为一行。

我有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时,它说我有语法错误,但我无法识别错误。任何帮助将非常感激。感谢。

1 个答案:

答案 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;