Correción

05/04/2004 - 16:45 por José G. Díaz U. | Informe spam
Saludos.

Tengo la siguiente instrucción SQL y no se por qué razón no me está
calculando los valores errados para los totales:

select periodo.cod_periodo,
cast(periodo.mes_inicio as char(2)) + '/' +
cast(periodo.ano_inicio as char(4)) + ' al ' +
cast(periodo.mes_fin as char(2)) + '/' +
cast(periodo.ano_fin as char(4)) Periodo,
EstunePlusPregradoCarreras.Nombre Carrera,
escuela.nombre_escuela Escuela,
count(distinct record_academico.cedula) TotalMujeresYHombres,
TM = sum(Case estudiante.sexo when 'M' then 1 else 0 end),
TF = sum(Case estudiante.sexo when 'F' then 1 else 0 end)
from record_academico, materia, escuela, periodo,
EstunePlusPregradoCarreras, Estudiante
where (EstunePlusPregradoCarreras.Id = Escuela.CarreraId)and
(escuela.cod_escuela = materia.cod_escuela)and
(materia.cod_materia = record_academico.cod_materia)and
(periodo.cod_periodo = record_academico.cod_periodo)and
(Estudiante.cedula = record_academico.cedula)and
(periodo.cod_periodo = 98)
group by escuela.cod_escuela,
escuela.nombre_escuela,
periodo.cod_periodo,
periodo.mes_inicio,
periodo.ano_inicio,
periodo.mes_fin,
periodo.ano_fin,
EstunePlusPregradoCarreras.Nombre

Me está arrojando el siguiente resultado:

T TM TF
98 10/2002 al 1 /2003 Administración ADMINISTRACIÓN 30 180 90
98 10/2002 al 1 /2003 Administración DISEÑO 37 150 220
98 10/2002 al 1 /2003 Administración TURISMO 21 54 135
98 10/2002 al 1 /2003 Computación COMPUTACIÓN 36 208 80
98 10/2002 al 1 /2003 Ingeniería ING.CIVIL 12 92
6
98 10/2002 al 1 /2003 Ingeniería ING.ELECTRÓNICA 45 344 16

Como podrán ver no se cumple que T = TM + TF. Se que la columna T está
correcta, pero qué pasa co las otras dos?

Gracias de antemano.

Jo
 

Leer las respuestas

#1 José G. Díaz U.
05/04/2004 - 16:58 | Informe spam
...esta es la versión con INNER JOINS y me da igual :S


SELECT PERIODO.cod_periodo, CAST(PERIODO.mes_inicio AS char(2)) + '/' +
CAST(PERIODO.ano_inicio AS char(4)) + ' al ' + CAST(PERIODO.mes_fin AS
char(2))
+ '/' + CAST(PERIODO.ano_fin AS char(4)) AS Periodo,
EstunePlusPregradoCarreras.Nombre AS Carrera, ESCUELA.nombre_escuela AS
Escuela,
COUNT(DISTINCT RECORD_ACADEMICO.cedula) AS
TotalMujeresYHombres,
TM = sum(Case estudiante.sexo when 'M' then 1 else 0 end),
TF = sum(Case estudiante.sexo when 'F' then 1 else 0 end)
FROM EstunePlusPregradoCarreras INNER JOIN
ESCUELA ON EstunePlusPregradoCarreras.Id ESCUELA.CarreraId INNER JOIN
MATERIA ON ESCUELA.cod_escuela = MATERIA.cod_escuela
INNER JOIN
RECORD_ACADEMICO ON MATERIA.cod_materia RECORD_ACADEMICO.cod_materia INNER JOIN
ESTUDIANTE ON RECORD_ACADEMICO.cedula ESTUDIANTE.cedula INNER JOIN
PERIODO ON RECORD_ACADEMICO.cod_periodo PERIODO.cod_periodo
WHERE Periodo.cod_periodo = 98
group by escuela.cod_escuela,
escuela.nombre_escuela,
periodo.cod_periodo,
periodo.mes_inicio,
periodo.ano_inicio,
periodo.mes_fin,
periodo.ano_fin,
EstunePlusPregradoCarreras.Nombre

Gracias de nuevo!

Jo
"José G. Díaz U." escribió en el mensaje
news:uFmr$
Saludos.

Tengo la siguiente instrucción SQL y no se por qué razón no me está
calculando los valores errados para los totales:

select periodo.cod_periodo,
cast(periodo.mes_inicio as char(2)) + '/' +
cast(periodo.ano_inicio as char(4)) + ' al ' +
cast(periodo.mes_fin as char(2)) + '/' +
cast(periodo.ano_fin as char(4)) Periodo,
EstunePlusPregradoCarreras.Nombre Carrera,
escuela.nombre_escuela Escuela,
count(distinct record_academico.cedula) TotalMujeresYHombres,
TM = sum(Case estudiante.sexo when 'M' then 1 else 0 end),
TF = sum(Case estudiante.sexo when 'F' then 1 else 0 end)
from record_academico, materia, escuela, periodo,
EstunePlusPregradoCarreras, Estudiante
where (EstunePlusPregradoCarreras.Id = Escuela.CarreraId)and
(escuela.cod_escuela = materia.cod_escuela)and
(materia.cod_materia = record_academico.cod_materia)and
(periodo.cod_periodo = record_academico.cod_periodo)and
(Estudiante.cedula = record_academico.cedula)and
(periodo.cod_periodo = 98)
group by escuela.cod_escuela,
escuela.nombre_escuela,
periodo.cod_periodo,
periodo.mes_inicio,
periodo.ano_inicio,
periodo.mes_fin,
periodo.ano_fin,
EstunePlusPregradoCarreras.Nombre

Me está arrojando el siguiente resultado:

T TM TF
98 10/2002 al 1 /2003 Administración ADMINISTRACIÓN 30 180 90
98 10/2002 al 1 /2003 Administración DISEÑO 37 150 220
98 10/2002 al 1 /2003 Administración TURISMO 21 54 135
98 10/2002 al 1 /2003 Computación COMPUTACIÓN 36 208 80
98 10/2002 al 1 /2003 Ingeniería ING.CIVIL 12


92
6
98 10/2002 al 1 /2003 Ingeniería ING.ELECTRÓNICA 45 344 16

Como podrán ver no se cumple que T = TM + TF. Se que la columna T está
correcta, pero qué pasa co las otras dos?

Gracias de antemano.

Jo




Preguntas similares