sql >> Base de Datos >  >> RDS >> Mysql

Convertir el conjunto de resultados de MySQL de filas a columnas

Mmmm... EAV. Una de las muchas razones para evitar los EAV (entity-attribute_value) es que son más difíciles de informar y consultar. Sin embargo, si conoce los atributos que desea con anticipación, puede hacer algo como:

Select id
    , Min( Case When name = 'Make' Then attribute_value End ) As Make
    , Min( Case When name = 'Year' Then attribute_value End ) As Year
    , Min( Case When name = 'Type' Then attribute_value End ) As Type
    , Min( Case When name = 'Axles' Then attribute_value End ) As Axles
    , Min( Case When name = 'Size' Then attribute_value End ) As Size
    , Min( Case When name = 'Frame' Then attribute_value End ) As Frame
    , ...
From attributes
Where name In('Make','Year','Type','Axles','Size','Frame',....)
Group By id

Ahora, MySQL tiene un GROUP_CONCAT que le permitirá concatenar múltiples valores para el mismo atributo en una lista si lo permite (por ejemplo, si una entidad puede tener múltiples atributos Make).