11
DAI - Ing. Arturo Rozas H uacho 1 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. Prenda C olor C antidad Camisa Blanco 5 Camisa Oscuro 13 Camisa Pastel 12 C hom pa Blanco 6 C hom pa Claro 9 C hom pa Oscuro 11 C hom pa Pastel 2 Pantalon Claro 1 Pantalon Oscuro 21 Pantalon Pastel 7 Polo Blanco 3 Polo Claro 8 Polo Oscuro 1 CrossTable1

Cross table

Embed Size (px)

Citation preview

Page 1: Cross table

DAI - Ing. Arturo Rozas Huacho

1

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.

Prenda Color CantidadCamisa Blanco 5Camisa Oscuro 13Camisa Pastel 12Chompa Blanco 6Chompa Claro 9Chompa Oscuro 11Chompa Pastel 2Pantalon Claro 1Pantalon Oscuro 21Pantalon Pastel 7Polo Blanco 3Polo Claro 8Polo Oscuro 1

CrossTable1

Page 2: Cross table

DAI - Ing. Arturo Rozas Huacho

2

4.1.7.- Tablas Cruzadas

Sistemas de Base de Datos

Prenda Color CantidadCamisa Blanco 5Camisa Oscuro 13Camisa Pastel 12Chompa Blanco 6Chompa Claro 9Chompa Oscuro 11Chompa Pastel 2Pantalon Claro 1Pantalon Oscuro 21Pantalon Pastel 7Polo Blanco 3Polo Claro 8Polo Oscuro 1

CrossTable1

Atributos de Medición

Atributos de Dimensión

Page 3: Cross table

DAI - Ing. Arturo Rozas Huacho

3

4.1.7.- Tablas CruzadasSistemas de Base de Datos

Prenda Color CantidadCamisa Blanco 5Camisa Oscuro 13Camisa Pastel 12Chompa Blanco 6Chompa Claro 9Chompa Oscuro 11Chompa Pastel 2Pantalon Claro 1Pantalon Oscuro 21Pantalon Pastel 7Polo Blanco 3Polo Claro 8Polo Oscuro 1

CrossTable1

Prenda Blanco Claro Oscuro PastelCamisa 5 0 13 12Chompa 6 9 11 2Pantalon 0 1 21 7Polo 3 8 1 0

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.

Page 4: Cross table

DAI - Ing. Arturo Rozas Huacho

4

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

Page 5: Cross table

DAI - Ing. Arturo Rozas Huacho

5

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

Prenda Color CantidadCamisa Blanco 5Camisa Oscuro 13Camisa Pastel 12Chompa Blanco 6Chompa Claro 9Chompa Oscuro 11Chompa Pastel 2Pantalon Claro 1Pantalon Oscuro 21Pantalon Pastel 7Polo Blanco 3Polo Claro 8Polo Oscuro 1

CrossTable1Prenda Blanco Claro OscuroCamisa 5 0 0Camisa 0 0 13Camisa 0 0 0Chompa 6 0 0Chompa 0 9 0Chompa 0 0 11Chompa 0 0 0Pantalon 0 1 0Pantalon 0 0 21Pantalon 0 0 0Polo 3 0 0Polo 0 8 0Polo 0 0 1

#Prenda

Page 6: Cross table

DAI - Ing. Arturo Rozas Huacho

6

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 Blanco Claro OscuroCamisa 5 0 0Camisa 0 0 13Camisa 0 0 0Chompa 6 0 0Chompa 0 9 0Chompa 0 0 11Chompa 0 0 0Pantalon 0 1 0Pantalon 0 0 21Pantalon 0 0 0Polo 3 0 0Polo 0 8 0Polo 0 0 1

#Prenda

Prenda Blanco Claro OscuroCamisa 5 0 13Chompa 6 9 11Pantalon 0 1 21Polo 3 8 1

Resultado

Page 7: Cross table

DAI - Ing. Arturo Rozas Huacho

7

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

Prenda Blanco Claro OscuroCamisa 5 0 13Chompa 6 9 11Pantalon 0 1 21Polo 3 8 1

Resultado

Prenda Color CantidadCamisa Blanco 5Camisa Oscuro 13Camisa Pastel 12Chompa Blanco 6Chompa Claro 9Chompa Oscuro 11Chompa Pastel 2Pantalon Claro 1Pantalon Oscuro 21Pantalon Pastel 7Polo Blanco 3Polo Claro 8Polo Oscuro 1

CrossTable1

Page 8: Cross table

DAI - Ing. Arturo Rozas Huacho

8

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.

Prenda Color CantidadCamisa Blanco 5Camisa Oscuro 13Camisa Pastel 12Chompa Blanco 6Chompa Claro 9Chompa Oscuro 11Chompa Pastel 2Pantalon Claro 1Pantalon Oscuro 21Pantalon Pastel 7Polo Blanco 3Polo Claro 8Polo Oscuro 1

CrossTable1

Por ejemplo, de la anterior tablase desea analizar las unidadesVendidas de todos los tipos de Prenda y de todos los colores.

Prenda Blanco Claro Oscuro PastelCamisa 5 0 13 12Chompa 6 9 11 2Pantalon 0 1 21 7Polo 3 8 1 0

Page 9: Cross table

DAI - Ing. Arturo Rozas Huacho

9

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);

Page 10: Cross table

DAI - Ing. Arturo Rozas Huacho

10

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

Page 11: Cross table

DAI - Ing. Arturo Rozas Huacho

11

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