Diese Präsentation wurde erfolgreich gemeldet.

Cross table

0

Teilen

Nächste SlideShare
Cursores
Cursores
Wird geladen in …3
×
1 von 11
1 von 11

Cross table

  1. 1. Sistemas de Base de Datos 4.1.7.- Tablas Cruzadas Para entender el concepto de CrossTable1 tablas cruzadas, veamos el Prenda Color Cantidad siguiente ejemplo: Camisa Blanco 5 Camisa Oscuro 13 Camisa Pastel 12 Chompa Blanco 6 Supongamos que se desea Chompa Claro 9 Analizar las ventas por tipo de Chompa Oscuro 11 prenda y color. Chompa Pastel 2 Pantalon Claro 1 Pantalon Oscuro 21 En un proceso previo se obtuvo Pantalon Pastel 7 la siguiente tabla. Polo Blanco 3 Polo Claro 8 Polo Oscuro 1 DAI - Ing. Arturo Rozas Huacho 1
  2. 2. Sistemas de Base de Datos 4.1.7.- Tablas Cruzadas CrossTable1 Prenda Color Cantidad Camisa Blanco 5 Camisa Oscuro 13 Camisa Pastel 12 Chompa Blanco 6 Atributos de Medición Chompa Claro 9 Chompa Oscuro 11 Chompa Pastel 2 Pantalon Claro 1 Atributos de Dimensión Pantalon Oscuro 21 Pantalon Pastel 7 Polo Blanco 3 Polo Claro 8 Polo Oscuro 1 DAI - Ing. Arturo Rozas Huacho 2
  3. 3. Sistemas de Base de Datos 4.1.7.- Tablas Cruzadas CrossTable1 Prenda Color Cantidad Camisa Blanco 5 Camisa Oscuro 13 Camisa Pastel 12 Chompa Blanco 6 Chompa Claro 9 Chompa Oscuro 11 Prenda Blanco Claro Oscuro Pastel Chompa Pastel 2 Camisa 5 0 13 12 Pantalon Claro 1 Chompa 6 9 11 2 Pantalon Oscuro 21 Pantalon 0 1 21 7 Pantalon Pastel 7 Polo 3 8 1 0 Polo Blanco 3 Polo Claro 8 Polo Oscuro 1 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 3
  4. 4. Sistemas de Base de Datos 4.1.7.- Tablas Cruzadas… 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 4
  5. 5. Sistemas de Base de Datos 4.1.7.- Tablas Cruzadas… 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 Prenda Color Cantidad Prenda Blanco Claro Oscuro Camisa Blanco 5 Camisa 5 0 0 Camisa Oscuro 13 Camisa 0 0 13 Camisa Pastel 12 Camisa 0 0 0 Chompa Blanco 6 Chompa 6 0 0 Chompa Claro 9 Chompa 0 9 0 Chompa Oscuro 11 Chompa 0 0 11 Chompa Pastel 2 Chompa 0 0 0 Pantalon Claro 1 Pantalon 0 1 0 Pantalon Oscuro 21 Pantalon 0 0 21 Pantalon Pastel 7 Pantalon 0 0 0 Polo Blanco 3 Polo 3 0 0 Polo Claro 8 Polo 0 8 0 Polo Oscuro 1 Polo 0 0 1 DAI - Ing. Arturo Rozas Huacho 5
  6. 6. Sistemas de Base de Datos 4.1.7.- Tablas Cruzadas… 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 Prenda Blanco Claro Oscuro Camisa 5 0 0 Camisa 0 0 13 Camisa 0 0 0 Resultado Chompa 6 0 0 Prenda Blanco Claro Oscuro Chompa 0 9 0 Camisa 5 0 13 Chompa 0 0 11 Chompa 6 9 11 Chompa 0 0 0 Pantalon 0 1 21 Pantalon 0 1 0 Polo 3 8 1 Pantalon 0 0 21 Pantalon 0 0 0 Polo 3 0 0 Polo 0 8 0 Polo 0 0 1 DAI - Ing. Arturo Rozas Huacho 6
  7. 7. Sistemas de Base de Datos 4.1.7.- Tablas Cruzadas… 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 CrossTable1 Prenda Color Cantidad Camisa Blanco 5 Camisa Oscuro 13 Camisa Pastel 12 Chompa Blanco 6 Resultado Chompa Claro 9 Prenda Blanco Claro Oscuro Chompa Oscuro 11 Camisa 5 0 13 Chompa Pastel 2 Chompa 6 9 11 Pantalon Claro 1 Pantalon 0 1 21 Pantalon Oscuro 21 Polo 3 8 1 Pantalon Pastel 7 Polo Blanco 3 Polo Claro 8 Polo Oscuro 1 DAI - Ing. Arturo Rozas Huacho 7
  8. 8. Sistemas de Base de Datos 4.1.7.- Tablas Cruzadas Dinámicas… 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 Prenda Color Cantidad Camisa Blanco 5 Por ejemplo, de la anterior tabla Camisa Oscuro 13 se desea analizar las unidades Camisa Pastel 12 Vendidas de todos los tipos de Chompa Blanco 6 Chompa Claro 9 Prenda y de todos los colores. Chompa Oscuro 11 Chompa Pastel 2 Pantalon Claro 1 Prenda Blanco Claro Oscuro Pastel Pantalon Oscuro 21 Camisa 5 0 13 12 Pantalon Pastel 7 Chompa 6 9 11 2 Polo Blanco 3 Pantalon 0 1 21 7 Polo Claro 8 Polo 3 8 1 0 Polo Oscuro 1 DAI - Ing. Arturo Rozas Huacho 8
  9. 9. Sistemas de Base de Datos 4.1.7.- Tablas Cruzadas Dinámicas… -- 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); DAI - Ing. Arturo Rozas Huacho 9
  10. 10. Sistemas de Base de Datos 4.1.7.- Tablas Cruzadas Dinámicas… 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 DAI - Ing. Arturo Rozas Huacho 10
  11. 11. Sistemas de Base de Datos 4.1.7.- Tablas Cruzadas Dinámicas… 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 DAI - Ing. Arturo Rozas Huacho 11

×