PIVOT y UNPIVOT
Aprovechando el inpass de novedades, encuentro oportuno el momento para aportar con soluciones técnicas a problemas que se nos hayan presentado en algún momento. En éste caso, gracias al aporte de uno de los integrantes del grupo en LinkedIn "Hablemos Informix" creado en el año 2010, y con cerca de ya 600 seguidores principalmente hispanoparlantes, les acerco un caso simple, de esos que a veces nos complican.
Tanto en la bienvenida que le hago a cada integrante que solicita el ingreso al grupo Hablemos Informix, como tambien en las publicaciones que realizo, los aliento en la importancia de participar con comentarios de sus experiencias en las dicusiones y/o a mandarme casos para publicar; ésta vez recibí uno desde Venezuela.
El problema planteado es el de poder ver los registros como columnas. Es una vista que rompe con el modelo relacional, o ANSI SQL. Hay motores como SQLSvr que lo soporta, pero en el caso de Informix, debemos escribir la sentencia SQL y luego de ser necesario encapsularla en una SP.
El requerimiento basado en la tabla que se encuentra a continuación (tabla de nombre aperturado_intermedio) era el de que cada registro del atributo chk_codigo fuese en la salida una columna diferente, y para cada ciclo/ciudad_destino realizar la sumatoria de todas las ocurrencias para el mismo chk_codigo. Es decir todas las ocurrencias para cada chk_codigo agrupado por ciclo y ciudad_destino.
El SQL resultante que resuelve el requerimiento es el siguiente:
Que a su vez dá lugar a la siguiente salida:
En sentido contrario el UNPIVOT es la inversa, es pasar de columnas a registros. Es decir que sería, partiendo de una tabla similar a la estructura presentada por la salida anterior, transformar las columnas en registros.
Si bien no es un tema demsaido complejo de resolver, es bueno tenerlo presente.