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.


CrossPosting de http://www.lonetcamp.com


 

Un comentario en “CrossTabs "Dinamic Pivot"”

  1. En página *.asp (v. studio .net 2010) tengo un gridview y en un botón (evento click) un código que hace una consulta a una tabla de una base de datos en sql server 2008. Puedo llevar el resultado de la consulta al gridview sin ningún problema.

    Resulta que necesito ubicar en el mismo gridview, un checkbox para que usuario pueda hacer click y seleccionar el registro. Esta checkbox no guarda ningún vínculo con la base de datos, solo se usa temporalmente para que los registros que se encuentren seleccionados puedan ser leídos para su correspondiente modificación que afectan a la misma y/o otra tabla.

    Preguntas:

    Mediante programación necesito ubicar el checkbox y el usuario pueda elegir.

    Mediante programación como puedo crear filas en gidview vinculados o sin vínculos a un dataset o datable.

    Mediante programación como se puede llamar: GridView1_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)

    Mediante programación como se puede llamar: Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs).

    Email: dimurve@hotmail.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *