En esta oportunidad estaremos hablando sobre Pivoting Tables una gran utilidad en SQL que nos permite obtener informacion agradable y sin perder nuestra estructura de informacion.
También las podemos encontrar como tablas dinámicas, su finalidad consiste en agrupar, sumar o generar informacion relevante. con el siguiente ejemplo estaremos mas claros.
Referencia #1
+----+---------+---------------+--------+ | id | item_id | property_name | value | +----+---------+---------------+--------+ | 1 | 1 | color | blue | | 2 | 1 | size | large | | 3 | 1 | weight | 65 | | 4 | 2 | color | orange | | 5 | 2 | weight | 57 | | 6 | 2 | size | large | | 7 | 3 | size | small | | 8 | 3 | color | red | | 9 | 3 | weight | 12 | | 10 | 4 | color | violet | | 11 | 4 | size | medium | | 12 | 4 | weight | 34 | | 13 | 5 | color | green | | 14 | 5 | weight | 10 | +----+---------+---------------+--------+
Referencia #2
+---------+--------+--------+--------+ | item_id | color | size | weight | +---------+--------+--------+--------+ | 1 | blue | large | 65 | | 2 | orange | large | 57 | | 3 | red | small | 12 | | 4 | violet | medium | 34 | | 5 | green | NULL | 10 | +---------+--------+--------+--------+
Anteriormente tenemos en la imagen de la referencia #1 un tabla compuesta por 4 campos, lo que queremos obtener es una tabla con mejor lectura y mas inteligente, donde podemos ver toda la informacion del item_id de manera individual.
A esto le llamamos Pivot Table, en pocas palabras volteamos los datos y obtenemos la informacion de manera horizontal.
Ahora vamos al grano como se realiza a nivel de programación ?
MySQL
SELECT item_id, MAX(IF(property_name = 'color', value, NULL)) AS color, MAX(IF(property_name = 'size', value, NULL)) AS size, ... ... ... FROM properties GROUP BY item_id;
IBM DB2
SELECT item_id, max(decode(property_name,'color', value)) AS color, max(decode(property_name,'size', value)) AS size, ... ... ... FROM properties GROUP BY item_id;
Si conoces una forma adicional compártela con nosotros y así aprenderemos mas.

