Nuevo Operador Pivot en Oracle 11g R2

Páginas: 6 (1314 palabras) Publicado: 17 de diciembre de 2015
Nuevo Operador Pivot en Oracle 11g R2
Por Gerardo Daniel Tezza 

Muchas nuevas funcionalidades ha incorporado la versión 11gR2 y esta es una, que para los que tenemos algunos años en el sector, la encontramos de suma utilidad.
Este operador permite resolver lo que se llaman consultas de referencia de tablas cruzadas con gran facilidad.
En primer lugar que es una consultas de tablas dereferencias cruzadas?
Las consultas cross table o también llamadas tablas de doble entrada, tablas multidimensionales, tablas dinámicas o Pivot y son utilizadas en entornos de reportes, BI y Olap.
Estas consultas se utilizan asociadas a funciones agrupadas tales como SUM, COUNT, MIN, MAX, etc.
Pero a diferencia de lo que ocurre con una sentencia común, con este tipo de funciones, necesitamos que losresultados no sean mostrados en cada fila, sino que sea mostrado por columna o sea convertir cada fila en una columna.
En las figuras que siguen mostramos la diferencia de concepto. Este primer ejemplo muestra una consulta donde obtenemos el total de ventas agrupados por el canal de venta campo Chanel_id y por cada trimestre del año campo Calendar_Quarter_Desc para las ventas del año 1998.Ejemplo de una sentencia clásica:
Select Channel_Id, Calendar_Quarter_Desc, Sum(Amount_Sold)
From Sales S
Join Times T
On S.Time_Id=T.Time_Id
Where S.Time_Id In (Select Time_Id From Times Where Calendar_Year=1998)
Group By Channel_Id, Calendar_Quarter_Desc
Order By Channel_Id, Calendar_Quarter_Desc;

Este sería el resultado de la consulta anterior

Figura 1. Resultado de la consulta
Difiere de esteque es el resultado de una consulta cross table

Figura 2 Resultado de la consulta cross table
Como se ve en la figura 1, el resultado de la fila CHANNEL_ID se repite por cada trimestre en total 4 por CHANNEL_ID.
 
En la figura 2 vemos el cambio cada campo CHANNEL_ID aparece una única vez y los resultados aparecen ahora en columnas separadas una por trimestre.
Como se resolvía enanteriormente
Ante esta situación lo que podíamos hacer era una consulta muy poco intuitiva y dificil de mantener, que cumplía con nuestro fin.
La consulta era la siguiente;
Select Channel_Id,
Sum(Case Calendar_Quarter_Desc
When '1998-01' Then Amount_Sold
Else 0
End)"1988-01",
Sum(Case Calendar_Quarter_Desc
When '1998-02' Then Amount_SoldElse 0
End)"1988-02",
Sum(Case Calendar_Quarter_Desc
When '1998-01' Then Amount_Sold
Else 0
End)"1988-03",
Sum(Case Calendar_Quarter_Desc
When '1998-01' Then Amount_Sold
Else 0
End)"1988-04"
From Sales S
Join Times T
On S.Time_Id=T.Time_Id
Where S.Time_Id In (Select Time_Id FromTimes Where Calendar_Year=1998)
Group By Channel_Id
order by "1988-01" Desc;

El resultado se muestra en al figura 3

Figura 3. Resultado de la consulta cross table
Como vemos el resultado mostrado por la figura 3, es el esperado.
Ahora en que nos diferencia una sentencia u otra al fin de cuentas es el mismo resultado.
La primera conclusión que podemos sacar, la más inmediata es que es mucho másdifícil de mantener la segunda consulta que la primera.
Ante cualquier cambio que necesite involucra varia líneas de código y podría ser extremadamente largo si el resultado de la consulta debiera mostrar 20 columnas.. Dejando afuera por ahora otros temas, como performance, podemos ver que si usamos la primer sentencia. Toda la carga del proceso la conversión de fila en columna esresponsabilidad de la aplicación.
Y acá vamos a una regla fundamental, "Todo lo que pueda resolver una sentencia SQL se debe resolver con una sentencia SQL".
A partir de la versión ORACLE 11G provee un comando nos permite una salida como la mostrada en la figura 2 y mucho más fácil de mantener. Para ello incorpora el operador PIVOT.
Sintaxis
Select * from table t −> Origen de datos
Pivot...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Oracle 11g
  • Manual de instalación oracle 11g
  • Manual de instalación de Oracle 11g
  • Actualizar Oracle de 10g a 11g
  • Envio De Correos Oracle 11G
  • Instalación y Conexión de ORACLE 11G XE y ORACLE DEVELOPER
  • Tipos de datos en oracle db 11g
  • Recreando consola oracle database 11g

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS