CrossTabs “Dinamic Pivot”

Si trabajáis normalmente con datos seguro que habéis necesitado crear alguna vez una consulta que devuelva una tabla con datos cruzados “Transformar filas en Columnas”.

En SQL 2005 tenemos una función llamada PIVOT que intenta recuperar la funcionalidad de MS Access TRANSFORM pero nos encontramos con un gran inconveniente, tenemos que conocer el nombre de las nuevas columnas que queremos recuperar.

 Por ejemplo tenemos este código sacado de un artículo de Sebastian Contente…

SELECT Vendedor,isnull([Perfumes],0) as Cremas ,isnull([Desodorantes],0) as Desodorantes,
isnull([Cremas],0) as Perfumes
/*Select que define como se mostraran los tados y por que columna se agrupara (Vendedor)*/

FROM
(   ) po

/*Origen de los Datos*/
PIVOT
(
SUM(cantidad)
FOR Rubro IN
([Cremas] , [Perfumes] , [DEsodorantes])
) AS PVT

Podéis comprobar  que utiliza PIVOT para recuperar tres nuevas columnas por cada tipo de producto y  filtrado por vendedor sumando la cantidad a mostrar.

Pero Claro Tenemos que saber que existen estos registros para formar las nuevas columnas!!!

Que opciones tenemos para poder generar estas nuevas columnas dinámicamente?, bueno por Internet podemos encontrar varias formas y os recomiendo personalmente este artículo para sacarnos de dudas.

Este crack hasta ha hecho una aplicación para probar el rendimiento de las dos opciones y ha sacado esta conclusión.

Beginning performance test for crosstab techniques.

Please enter the # of iterations to perform:
75

Testing dynamic SQL crosstab procedure….
Result: 25 seconds.

Testing static SQL crosstab procedure….
— Result: 22 seconds.

Testing C# crosstab transformation….
Result: 8 seconds.

Testing complete.

Artículo completo…

Esta clarísimo cual es la forma más óptima para poder utilizar Crosstabs en nuestras aplicaciones y con un par de cambios podemos poner la función en nuestro DAL para reutilizarla fácilmente.

Bueno en definitiva si podéis pasaros por Jeff’s SQL Server Blog  que es totalmente recomendable.

Saludos.

 

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s