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.


lunes, 3 de junio de 2013

On 15:56 by Unknown in , , ,    2 comments
La siguiente mini aplicación muestra como conectarse a una base de datos ingresando de forma manual los parámetros de conexión (bd, puerto, etc) y luego visualizar los datos de cualquiera de las tablas de la BD seleccionada, lo diferente que tiene a la mayoría de ejemplos mostrados en Internet es que se cargan las columnas de forma dinámica  es decir que se cargan todas las columnas de la tabla y no solo un numero estático de columnas definidas en el programa, lo cual puede servir en muchos casos, con esto se tiene la conexión y la lectura de datos, si se quiere hacer cualquier otro uso como insertar , eliminar etc, se puede seguir el mismo patrón partiendo de este ejemplo.

En el .zip va incluido el driver (ultima version) para conectar java con postgres, se realizo en netbeans 7.3 con jdk 7u21.

La aplicación se ve así:



y en el cuadro de dialogo ingresan los valores correspondientes y en el combobox de la ventana principal pueden ver las tablas disponibles y ver los datos de cada una.


Pueden descargarla en: Java - Postgres
Nota: El código no es el mas optimo que digamos porque no tenia tiempo para mejorarlo, la prioridad era que funcionara XD y lo pueden notar en los métodos de la clase conexión pero puede ser mejorado y/o modificada de acuerdo a las necesidades.

Créditos a:  http://gnucesar.wordpress.com/2008/07/22/conexion-a-postgres-desde-java/ ya que a partir de esta clase me base para hacer la conexión.