DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas Sistemas de Base de Datos Para entender el concepto de tablas cruzadas, veamos el siguiente ejemplo: Supongamos que se desea Analizar las ventas por tipo de prenda y color. En un proceso previo se obtuvo la siguiente tabla. CrossTable1
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas Sistemas de Base de Datos CrossTable1 Atributos de Medición Atributos de Dimensión
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas Sistemas de Base de Datos CrossTable1 Los valores del atributo de la dimensión Color se utilizan como columnas en la nueva tabla. Este tipo de resúmenes es el primer nivel de análisis de la información y es una necesidad frecuente en el apoyo a la toma de decisiones.
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas… Sistemas de Base de Datos Paso 1.- Supongamos que ya se tiene la siguiente tabla: CrossTable1 (Prenda, Color, Cantidad) A partir de ésta, generar una tabla temporal con las siguientes Columnas: Resultado(Prenda, Blanco, Claro, Oscuro) select Prenda, "Blanco" = case when Color = 'Blanco' then Cantidad else 0 end, "Claro" = case when Color = 'Claro' then Cantidad else 0 end, "Oscuro" = case when Color = 'Oscuro' then Cantidad else 0 end into #Prenda from CrossTable1
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas… Sistemas de Base de Datos select Prenda, "Blanco" = case when Color = 'Blanco' then Cantidad else 0 end, "Claro" = case when Color = 'Claro' then Cantidad else 0 end, "Oscuro" = case when Color = 'Oscuro' then Cantidad else 0 end into #Prenda from CrossTable1 CrossTable1#Prenda
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas… Sistemas de Base de Datos Paso 2.- Totalizar cada columna, considerando la prenda como criterio de grupo. select Prenda, "Blanco" = sum(Blanco), "Claro" = sum(Claro), "Oscuro" = sum(Oscuro) from #Prenda group by Prenda #Prenda Resultado
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas… Sistemas de Base de Datos Algoritmo genérico en un solo paso. select Prenda, "Blanco" = sum(case when Color = 'Blanco' then Cantidad else 0 end), "Claro" = sum(case when Color = 'Claro' then Cantidad else 0 end), "Oscuro" = sum(case when Color = 'Oscuro' then Cantidad else 0 end) from CrossTable1 group by Prenda Resultado CrossTable1
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas Dinámicas… Sistemas de Base de Datos En este tipo de tablas cruzadas no se conoce de antemano el número de columnas. En consecuencia no se puede aplicar el algoritmo anterior. CrossTable1 Por ejemplo, de la anterior tabla se desea analizar las unidades Vendidas de todos los tipos de Prenda y de todos los colores.
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas Dinámicas… Sistemas de Base de Datos -- Generar tabla temporal con solo Color select distinct cast(Color as varchar(2000)) Color into #Color from CrossTable1 order by Color; -- Concatenar los Colores en la varchar(2000); = ''; update #Color = Color -- Quitar primera coma = -- Construir sentencia SQL que permita generar el Cross Table varchar(2000); int; varchar(12);
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas Dinámicas… Sistemas de Base de Datos = 'SELECT Prenda ' <> '' begin -- Extraer Color = > 0 begin = = end else begin = ''; end; -- Crear sentencia SQL para Color + when Color = then Cantidad else '''' end)'; end; -- while
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas Dinámicas… Sistemas de Base de Datos + ' FROM CrossTable1 GROUP BY Prenda'; -- Ejecutar SQL El contenido de la es: select Prenda, "Blanco" = sum(case when Color = 'Blanco' then Cantidad else 0 end), "Claro" = sum(case when Color = 'Claro' then Cantidad else 0 end), "Oscuro" = sum(case when Color = 'Oscuro' then Cantidad else 0 end) from CrossTable1 group by Prenda