Un poco de todo lo relacionado al area de la informatica... programacion, ocio, configuraciones, en fin herramientas que pueden ser utiles para un estudiante de ingenieria en ciencias y sistemas.

martes, 4 de junio de 2013

On 22:13 by Unknown in , ,    No comments


Las tablas pivote sirven para presentar los datos de una forma mas estructurada, reportes, mostrar totales etc, a modo de darle una mejor vista a los datos y que sean mas entendibles al mismo tiempo.

Esto se puede realizar con sql básico que es aceptado por cualquier DBMS y también haciendo uso de la función "pivot" que no pertenece al estándar sql pero que es aceptada por algunos dbms.

Oracle implemento el uso de esta función a partir de la versión 11 (según leí) por lo que en versiones anteriores no es reconocida, se usaba la función DECODE que trabaja de forma similar.

Los siguientes ejemplos están realizados en oracle 11.2 XE versión para windows y prácticamente sirven para mostrar como pasar una consulta pivote realizada con sql básico a una realizada con la función pivot, la cual nos simplifica el código de la consulta.

Se tiene la siguiente consulta con tabla pivote realizada con sql básico





Para realizar esta misma consulta con la función pivot se realiza lo siguiente :

1. Seleccionamos los campos que necesitamos en este caso el año y el mes donde cada año representa una fila y los meses las columnas.

Select * (Select extract(year from fecha_inventario) as anio,extract(month from fecha_inventario) as mes From equipos S )

2. Escribir la instrucción pivot a continuación de la consulta anterior

3. Hacer la función de agregación que necesitamos en este caso “count” y realizar el FOR y el IN

Pivot ( Count (mes) For mes in (1 as enero,2 as febrero,3 as marzo,4 as abril,5 as mayo,6 as junio,7 as julio,8 as agosto,9 as septiembre,10 as octubre,11 as noviembre,12 as diciembre) ) order by anio

Count (mes) para contar el numero de equipos por cada mes y luego el FOR<campo>  en este caso también el mes porque en el es donde vamos a buscar los valores que necesitamos y por ultimo IN en donde se le da un listado de valores a buscar.

Como se puede observar al encontrar un “1” se devolverá “enero” y así sucesivamente.

3. Con la consulta anterior todo bien, y hay muchos ejemplos así en Internet pero el problema es que nos falta la columna “TOTAL” que tiene la consulta mostrada al inicio. Para esto en vez de tener select * al principio de la consulta agregamos lo siguiente

Select anio,enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre, enero+febrero+marzo+abril+mayo+junio+julio+agosto+septiembre+octubre+noviembre+diciembre as total from…. 

 Donde sumamos todos los campos para obtener el total y así tener otra columna al final.

La consulta nos queda entonces:





y con esto ya esta realizada la consulta con la función PIVOT.

Nota: al incluir la clausula IN solamente se puede indicar un conjunto de valores, es decir un listado previamente conocido de valores ya que si queremos agregar las columnas de forma dinámica haciendo un SELECT IN nos dará un error ya que la función pivot no permite trabajar de esta manera.

Por ultimo un ejemplo de una consulta que agrega totales verticales y lo unico que se hace es un UNION ALL.


0 comentarios:

Publicar un comentario