SQL : Pivoting Tables.

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.

Deja un comentario