La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

DAI - Ing. Arturo Rozas Huacho1 4.1.7.- Tablas Cruzadas Sistemas de Base de Datos Para entender el concepto de tablas cruzadas, veamos el siguiente ejemplo:

Presentaciones similares


Presentación del tema: "DAI - Ing. Arturo Rozas Huacho1 4.1.7.- Tablas Cruzadas Sistemas de Base de Datos Para entender el concepto de tablas cruzadas, veamos el siguiente ejemplo:"— Transcripción de la presentación:

1 DAI - Ing. Arturo Rozas Huacho1 4.1.7.- 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

2 DAI - Ing. Arturo Rozas Huacho2 4.1.7.- Tablas Cruzadas Sistemas de Base de Datos CrossTable1 Atributos de Medición Atributos de Dimensión

3 DAI - Ing. Arturo Rozas Huacho3 4.1.7.- 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.

4 DAI - Ing. Arturo Rozas Huacho4 4.1.7.- 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

5 DAI - Ing. Arturo Rozas Huacho5 4.1.7.- 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

6 DAI - Ing. Arturo Rozas Huacho6 4.1.7.- 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

7 DAI - Ing. Arturo Rozas Huacho7 4.1.7.- 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

8 DAI - Ing. Arturo Rozas Huacho8 4.1.7.- 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.

9 DAI - Ing. Arturo Rozas Huacho9 4.1.7.- 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 variable @Colores declare @Colores varchar(2000); set @Colores = ''; update #Color set @Colores = Color = @Colores+','+Color; -- Quitar primera coma set @Colores = SubString(@Colores,2,2000); -- Construir sentencia SQL que permita generar el Cross Table declare @TextoSQL varchar(2000); declare @Posicion int; declare @Color varchar(12);

10 DAI - Ing. Arturo Rozas Huacho10 4.1.7.- Tablas Cruzadas Dinámicas… Sistemas de Base de Datos set @TextoSQL = 'SELECT Prenda ' while @Colores <> '' begin -- Extraer Color set @Posicion = CharIndex(',',@Colores); if @Posicion > 0 begin set @Color = SubString(@Colores,1,@Posicion-1); set @Colores = SubString(@Colores,@Posicion+1,2000); end else begin set @Color = @Colores; set @Colores = ''; end; -- Crear sentencia SQL para Color set @TextoSQL = @TextoSQL + ',"'+@Color+'"=SUM(case when Color = '''+@Color+''' then Cantidad else '''' end)'; end; -- while

11 DAI - Ing. Arturo Rozas Huacho11 4.1.7.- Tablas Cruzadas Dinámicas… Sistemas de Base de Datos set @TextoSQL = @TextoSQL + ' FROM CrossTable1 GROUP BY Prenda'; -- Ejecutar SQL exec(@TextoSQL) El contenido de la variable @TextoSQL 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


Descargar ppt "DAI - Ing. Arturo Rozas Huacho1 4.1.7.- Tablas Cruzadas Sistemas de Base de Datos Para entender el concepto de tablas cruzadas, veamos el siguiente ejemplo:"

Presentaciones similares


Anuncios Google