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

Preguntas similare

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




Respuesta Responder a este mensaje
#2 Javier Loria
05/04/2004 - 18:06 | Informe spam
Hola:
Pueden ocurrir varias cosas, T lo calculas como un DISTINCT lo cual
significa que solo cuentas las cedulas distintas, si COUNT(cedula) te da un
valor diferente podria ser que tengas repetidas. Adicionalmente puede ser
que tengas cedulas en Null, esto lo descubres con COUNT(*).
Por ultimo se me ocurre que sexo pueda ser diferente de M y F. Alguien
puede interpretar que es la frecuencian del sexo: Diario, Semanal, Mensual,
etc. :) Cambia la condicion de Femenino a No Masculino o sea: TF=SUM(CASE
estudiante.sexo WHEN 'M' THEN 0 else 1 END)
Eso es lo que se me ocurre, sin el esquema de las tablas, pero me da la
impresion que en M/F estas contanto matriculas de estudiantes de sexo
Femenino y matriculas de estudiantes de sexo Masculino, y no estas contando
estudiantes.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
José G. Díaz U. escribio:
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
Respuesta Responder a este mensaje
#3 José G. Díaz U.
05/04/2004 - 18:23 | Informe spam
Javier se me pasó mi última prueba:

select distinct Estudiantes.cedula,
Estudiantes.cod_periodo,
Estudiantes.sexo,
EstunePlusPregradoCarreras.Nombre Carrera,
Escuela.nombre_escuela Programa
from (select distinct record_academico.cedula,
record_academico.cod_periodo,
estudiante.sexo
from record_academico, periodo, Estudiante
where (periodo.cod_periodo = record_academico.cod_periodo)and
(Estudiante.cedula = record_academico.cedula)and
(record_academico.condicion = 6)and
(periodo.cod_periodo = 98)
group by record_academico.cedula,
record_academico.cod_periodo,
estudiante.sexo) Estudiantes, record_academico,
materia, escuela, EstunePlusPregradoCarreras
where Estudiantes.cedula = record_academico.cedula and
escuela.cod_escuela = materia.cod_escuela and
materia.cod_materia = record_academico.cod_materia and
EstunePlusPregradoCarreras.Id = Escuela.CarreraId and
record_academico.cod_periodo = 98

Este fue el resultado:

19799 98 M Administración DISEÑO
12358846 98 M Administración DISEÑO
12543784 98 M Ingeniería ING.ELECTRÓNICA
12543884 98 F Administración DISEÑO
12543907 98 F Administración DISEÑO
12543944 98 F Computación COMPUTACIÓN
12544254 98 M Ingeniería ING.ELECTRÓNICA
12544374 98 M Administración DISEÑO
12544517 98 F Administración DISEÑO
13325294 98 M Computación COMPUTACIÓN
13802478 98 M Ingeniería ING.CIVIL
14143873 98 M Administración ADMINISTRACIÓN
14143985 98 F Computación COMPUTACIÓN
14332479 98 M Ingeniería ING.CIVIL
14351469 98 M Ingeniería ING.CIVIL
14442326 98 F Ingeniería ING.CIVIL
14675945 98 M Computación COMPUTACIÓN
14852110 98 F Administración TURISMO
14852735 98 M Ingeniería ING.ELECTRÓNICA
14889871 98 M Administración DISEÑO
15020683 98 M Computación COMPUTACIÓN
15178640 98 M Administración ADMINISTRACIÓN
15179290 98 M Administración ADMINISTRACIÓN
15201525 98 F Computación COMPUTACIÓN
15212877 98 M Administración DISEÑO
15394063 98 F Administración ADMINISTRACIÓN
15396309 98 M Administración DISEÑO
15396929 98 F Administración ADMINISTRACIÓN
15420362 98 M Administración DISEÑO
15433053 98 F Administración TURISMO
15439956 98 F Administración ADMINISTRACIÓN
15487626 98 M Computación COMPUTACIÓN
15487954 98 M Administración TURISMO
15488421 98 M Administración DISEÑO
15488887 98 F Administración DISEÑO
15614200 98 M Administración ADMINISTRACIÓN
15662476 98 M Administración ADMINISTRACIÓN
15663172 98 M Administración TURISMO
15665016 98 M Computación COMPUTACIÓN
15665504 98 M Administración ADMINISTRACIÓN
15665507 98 M Computación COMPUTACIÓN
15665614 98 M Ingeniería ING.ELECTRÓNICA
15724178 98 F Computación COMPUTACIÓN
15725225 98 M Administración DISEÑO
15804247 98 M Ingeniería ING.ELECTRÓNICA
15832659 98 M Computación COMPUTACIÓN
15872686 98 M Ingeniería ING.CIVIL
15976054 98 M Administración TURISMO
16005038 98 M Administración DISEÑO
16005578 98 M Ingeniería ING.CIVIL
16006440 98 M Administración ADMINISTRACIÓN
16006688 98 M Ingeniería ING.ELECTRÓNICA
16006797 98 M Administración ADMINISTRACIÓN
16030122 98 M Computación COMPUTACIÓN
16105235 98 F Administración ADMINISTRACIÓN
16135678 98 M Administración DISEÑO
16135893 98 M Ingeniería ING.ELECTRÓNICA
16135971 98 M Computación COMPUTACIÓN
16218463 98 M Administración ADMINISTRACIÓN
16224318 98 F Administración ADMINISTRACIÓN
16246127 98 M Administración TURISMO
16247050 98 F Administración ADMINISTRACIÓN
16247585 98 M Ingeniería ING.ELECTRÓNICA
16247997 98 F Administración TURISMO
16248579 98 M Ingeniería ING.ELECTRÓNICA
16273299 98 M Administración TURISMO
16273325 98 F Computación COMPUTACIÓN
16273811 98 M Computación COMPUTACIÓN
16273949 98 M Ingeniería ING.ELECTRÓNICA
16287383 98 F Administración DISEÑO
16332361 98 M Ingeniería ING.ELECTRÓNICA
16359255 98 M Computación COMPUTACIÓN
16411517 98 M Ingeniería ING.ELECTRÓNICA
16411746 98 F Administración ADMINISTRACIÓN
16412246 98 M Ingeniería ING.ELECTRÓNICA
16412609 98 M Ingeniería ING.ELECTRÓNICA
16434485 98 F Administración TURISMO
16460356 98 M Computación COMPUTACIÓN
16460935 98 M Ingeniería ING.CIVIL
16460935 98 M Ingeniería ING.ELECTRÓNICA
16461345 98 F Administración DISEÑO
16461632 98 F Ingeniería ING.ELECTRÓNICA
16461782 98 M Administración ADMINISTRACIÓN
16461942 98 F Administración ADMINISTRACIÓN
16462550 98 F Administración DISEÑO
16526872 98 F Administración ADMINISTRACIÓN
16562428 98 F Administración TURISMO
16591222 98 M Ingeniería ING.ELECTRÓNICA
16598638 98 M Ingeniería ING.ELECTRÓNICA
16619326 98 M Ingeniería ING.ELECTRÓNICA
16643686 98 F Administración DISEÑO
16669085 98 M Ingeniería ING.ELECTRÓNICA
16671158 98 M Ingeniería ING.ELECTRÓNICA
16672064 98 M Ingeniería ING.CIVIL
16673063 98 F Computación COMPUTACIÓN
16714532 98 M Ingeniería ING.ELECTRÓNICA
16726776 98 M Computación COMPUTACIÓN
16809959 98 F Administración DISEÑO
16811855 98 M Ingeniería ING.CIVIL
16813221 98 M Administración ADMINISTRACIÓN
16813226 98 M Ingeniería ING.ELECTRÓNICA
16813312 98 F Computación COMPUTACIÓN
16814237 98 M Ingeniería ING.ELECTRÓNICA
16814362 98 F Administración TURISMO
16814755 98 M Administración ADMINISTRACIÓN
16815001 98 M Administración ADMINISTRACIÓN
16815003 98 M Administración ADMINISTRACIÓN
16815317 98 M Ingeniería ING.ELECTRÓNICA
16821031 98 M Ingeniería ING.ELECTRÓNICA
16871695 98 M Administración ADMINISTRACIÓN
16875747 98 M Administración DISEÑO
16876857 98 F Administración DISEÑO
16878242 98 F Administración DISEÑO
16888687 98 M Ingeniería ING.ELECTRÓNICA
16889974 98 M Ingeniería ING.ELECTRÓNICA
16890393 98 M Computación COMPUTACIÓN
16890886 98 F Administración DISEÑO
16894801 98 M Administración TURISMO
16904464 98 M Computación COMPUTACIÓN
16924787 98 M Computación COMPUTACIÓN
16949123 98 F Ingeniería ING.ELECTRÓNICA
16970132 98 M Ingeniería ING.ELECTRÓNICA
16970383 98 F Administración DISEÑO
17012129 98 F Administración DISEÑO
17041337 98 M Ingeniería ING.ELECTRÓNICA
17064571 98 F Administración TURISMO
17076198 98 M Ingeniería ING.ELECTRÓNICA
17079981 98 M Ingeniería ING.ELECTRÓNICA
17080705 98 F Administración TURISMO
17085495 98 M Computación COMPUTACIÓN
17100526 98 M Computación COMPUTACIÓN
17100576 98 M Administración ADMINISTRACIÓN
17116541 98 M Computación COMPUTACIÓN
17118119 98 M Computación COMPUTACIÓN
17123061 98 M Ingeniería ING.ELECTRÓNICA
17123575 98 M Ingeniería ING.ELECTRÓNICA
17125462 98 M Administración ADMINISTRACIÓN
17141394 98 M Ingeniería ING.CIVIL
17142578 98 M Administración DISEÑO
17143610 98 M Administración ADMINISTRACIÓN
17144684 98 F Computación COMPUTACIÓN
17144837 98 M Computación COMPUTACIÓN
17146305 98 M Ingeniería ING.ELECTRÓNICA
17146345 98 M Ingeniería ING.ELECTRÓNICA
17268977 98 F Administración ADMINISTRACIÓN
17272811 98 M Ingeniería ING.ELECTRÓNICA
17286557 98 F Administración TURISMO
17300569 98 F Administración DISEÑO
17300905 98 M Ingeniería ING.ELECTRÓNICA
17303381 98 F Administración DISEÑO
17327539 98 F Administración TURISMO
17386064 98 M Computación COMPUTACIÓN
17400038 98 M Computación COMPUTACIÓN
17400183 98 F Administración TURISMO
17400363 98 F Administración TURISMO
17400703 98 F Administración DISEÑO
17401182 98 M Computación COMPUTACIÓN
17402101 98 M Ingeniería ING.ELECTRÓNICA
17441157 98 F Computación COMPUTACIÓN
17443350 98 F Administración DISEÑO
17514262 98 M Ingeniería ING.ELECTRÓNICA
17588079 98 M Administración DISEÑO
17641041 98 M Ingeniería ING.CIVIL
17641766 98 M Ingeniería ING.ELECTRÓNICA
17705778 98 F Administración TURISMO
17706228 98 F Administración DISEÑO
17706700 98 M Ingeniería ING.ELECTRÓNICA
17729979 98 F Administración DISEÑO
17775147 98 F Administración TURISMO
17803109 98 M Computación COMPUTACIÓN
17855193 98 M Ingeniería ING.CIVIL
17857723 98 M Ingeniería ING.ELECTRÓNICA
17925981 98 F Administración DISEÑO
17982531 98 M Ingeniería ING.ELECTRÓNICA
17983108 98 M Administración DISEÑO
18364306 98 M Administración ADMINISTRACIÓN
18588865 98 F Computación COMPUTACIÓN
19994418 98 M Administración ADMINISTRACIÓN
81988214 98 F Administración TURISMO
82142985 98 F Administración DISEÑO
82214811 98 M Computación COMPUTACIÓN

...fueron 181 registros lo cual es correcto para el periodo 98. Sin embargo
no logro que me haga seis filas así:

PERIODO, CARRERA, PROGRAMA, TOTAL, TOTALHOMBRES, TOTALMUJERES

Gracias amigo!

Jo


"Javier Loria" escribió en el mensaje
news:
Hola:
Pueden ocurrir varias cosas, T lo calculas como un DISTINCT lo cual
significa que solo cuentas las cedulas distintas, si COUNT(cedula) te da


un
valor diferente podria ser que tengas repetidas. Adicionalmente puede ser
que tengas cedulas en Null, esto lo descubres con COUNT(*).
Por ultimo se me ocurre que sexo pueda ser diferente de M y F. Alguien
puede interpretar que es la frecuencian del sexo: Diario, Semanal,


Mensual,
etc. :) Cambia la condicion de Femenino a No Masculino o sea: TF=SUM(CASE
estudiante.sexo WHEN 'M' THEN 0 else 1 END)
Eso es lo que se me ocurre, sin el esquema de las tablas, pero me da


la
impresion que en M/F estas contanto matriculas de estudiantes de sexo
Femenino y matriculas de estudiantes de sexo Masculino, y no estas


contando
estudiantes.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
José G. Díaz U. escribio:
> 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


Respuesta Responder a este mensaje
#4 Javier Loria
06/04/2004 - 00:48 | Informe spam
Hola Jose:
Viendo el Diagrama, me parece que efectivamente estas contando en TM y
FM la cantidad de personas por sexo en los curso, o sea como
Record_Academico tiene una relacion de uno a muchos para cada
Record_Academico aparecera una cuenta para cada vez que se registran.
Prueba con:

TM=COUNT(DISTINCT
CASE EstudianteSexo
WHEN 'M' THEN Estudiante.cedula
ELSE NULL
END),
TF=COUNT(DISTINCT
CASE EstudianteSexo
WHEN 'F' THEN Estudiante.cedula
ELSE NULL
END),
...
Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

José G. Díaz U. escribio:
Saludos Javier y de antemano gracias por el interés.

Anexo te envío el diagrama de la base de datos

No tengo cédulas con null. Me interesa conocer las cantidades de
mujeres y hombres por Carrera y Programa.

Esto me está matando pero bueee.poco a poco.

Gracias!

Jo

"Javier Loria" escribió en el mensaje
news:
Hola:
Pueden ocurrir varias cosas, T lo calculas como un DISTINCT lo
cual significa que solo cuentas las cedulas distintas, si
COUNT(cedula) te da un valor diferente podria ser que tengas
repetidas. Adicionalmente puede ser que tengas cedulas en Null, esto
lo descubres con COUNT(*). Por ultimo se me ocurre que sexo
pueda ser diferente de M y F. Alguien puede interpretar que es la
frecuencian del sexo: Diario, Semanal, Mensual, etc. :) Cambia la
condicion de Femenino a No Masculino o sea: TF=SUM(CASE
estudiante.sexo WHEN 'M' THEN 0 else 1 END) Eso es lo que se me
ocurre, sin el esquema de las tablas, pero me da la impresion que en
M/F estas contanto matriculas de estudiantes de sexo Femenino y
matriculas de estudiantes de sexo Masculino, y no estas contando
estudiantes. Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
José G. Díaz U. escribio:
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
Respuesta Responder a este mensaje
#5 José G. Díaz U.
06/04/2004 - 06:45 | Informe spam
Saludos Javier.

Efectivamente amigo mío, fue precisa y exacta tu observación.

El código de la consulta quedó como sigue:

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=COUNT(DISTINCT CASE Estudiante.Sexo WHEN 'M' THEN
Estudiante.cedula ELSE NULL END),
TF=COUNT(DISTINCT CASE Estudiante.Sexo WHEN 'F' THEN
Estudiante.cedula ELSE NULL 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

Muchas gracias!

Jo


"José G. Díaz U." escribió en el mensaje
news:
Javier se me pasó mi última prueba:

select distinct Estudiantes.cedula,
Estudiantes.cod_periodo,
Estudiantes.sexo,
EstunePlusPregradoCarreras.Nombre Carrera,
Escuela.nombre_escuela Programa
from (select distinct record_academico.cedula,
record_academico.cod_periodo,
estudiante.sexo
from record_academico, periodo, Estudiante
where (periodo.cod_periodo = record_academico.cod_periodo)and
(Estudiante.cedula = record_academico.cedula)and
(record_academico.condicion = 6)and
(periodo.cod_periodo = 98)
group by record_academico.cedula,
record_academico.cod_periodo,
estudiante.sexo) Estudiantes, record_academico,
materia, escuela, EstunePlusPregradoCarreras
where Estudiantes.cedula = record_academico.cedula and
escuela.cod_escuela = materia.cod_escuela and
materia.cod_materia = record_academico.cod_materia and
EstunePlusPregradoCarreras.Id = Escuela.CarreraId and
record_academico.cod_periodo = 98

Este fue el resultado:

19799 98 M Administración DISEÑO
12358846 98 M Administración DISEÑO
12543784 98 M Ingeniería ING.ELECTRÓNICA
12543884 98 F Administración DISEÑO
12543907 98 F Administración DISEÑO
12543944 98 F Computación COMPUTACIÓN
12544254 98 M Ingeniería ING.ELECTRÓNICA
12544374 98 M Administración DISEÑO
12544517 98 F Administración DISEÑO
13325294 98 M Computación COMPUTACIÓN
13802478 98 M Ingeniería ING.CIVIL
14143873 98 M Administración ADMINISTRACIÓN
14143985 98 F Computación COMPUTACIÓN
14332479 98 M Ingeniería ING.CIVIL
14351469 98 M Ingeniería ING.CIVIL
14442326 98 F Ingeniería ING.CIVIL
14675945 98 M Computación COMPUTACIÓN
14852110 98 F Administración TURISMO
14852735 98 M Ingeniería ING.ELECTRÓNICA
14889871 98 M Administración DISEÑO
15020683 98 M Computación COMPUTACIÓN
15178640 98 M Administración ADMINISTRACIÓN
15179290 98 M Administración ADMINISTRACIÓN
15201525 98 F Computación COMPUTACIÓN
15212877 98 M Administración DISEÑO
15394063 98 F Administración ADMINISTRACIÓN
15396309 98 M Administración DISEÑO
15396929 98 F Administración ADMINISTRACIÓN
15420362 98 M Administración DISEÑO
15433053 98 F Administración TURISMO
15439956 98 F Administración ADMINISTRACIÓN
15487626 98 M Computación COMPUTACIÓN
15487954 98 M Administración TURISMO
15488421 98 M Administración DISEÑO
15488887 98 F Administración DISEÑO
15614200 98 M Administración ADMINISTRACIÓN
15662476 98 M Administración ADMINISTRACIÓN
15663172 98 M Administración TURISMO
15665016 98 M Computación COMPUTACIÓN
15665504 98 M Administración ADMINISTRACIÓN
15665507 98 M Computación COMPUTACIÓN
15665614 98 M Ingeniería ING.ELECTRÓNICA
15724178 98 F Computación COMPUTACIÓN
15725225 98 M Administración DISEÑO
15804247 98 M Ingeniería ING.ELECTRÓNICA
15832659 98 M Computación COMPUTACIÓN
15872686 98 M Ingeniería ING.CIVIL
15976054 98 M Administración TURISMO
16005038 98 M Administración DISEÑO
16005578 98 M Ingeniería ING.CIVIL
16006440 98 M Administración ADMINISTRACIÓN
16006688 98 M Ingeniería ING.ELECTRÓNICA
16006797 98 M Administración ADMINISTRACIÓN
16030122 98 M Computación COMPUTACIÓN
16105235 98 F Administración ADMINISTRACIÓN
16135678 98 M Administración DISEÑO
16135893 98 M Ingeniería ING.ELECTRÓNICA
16135971 98 M Computación COMPUTACIÓN
16218463 98 M Administración ADMINISTRACIÓN
16224318 98 F Administración ADMINISTRACIÓN
16246127 98 M Administración TURISMO
16247050 98 F Administración ADMINISTRACIÓN
16247585 98 M Ingeniería ING.ELECTRÓNICA
16247997 98 F Administración TURISMO
16248579 98 M Ingeniería ING.ELECTRÓNICA
16273299 98 M Administración TURISMO
16273325 98 F Computación COMPUTACIÓN
16273811 98 M Computación COMPUTACIÓN
16273949 98 M Ingeniería ING.ELECTRÓNICA
16287383 98 F Administración DISEÑO
16332361 98 M Ingeniería ING.ELECTRÓNICA
16359255 98 M Computación COMPUTACIÓN
16411517 98 M Ingeniería ING.ELECTRÓNICA
16411746 98 F Administración ADMINISTRACIÓN
16412246 98 M Ingeniería ING.ELECTRÓNICA
16412609 98 M Ingeniería ING.ELECTRÓNICA
16434485 98 F Administración TURISMO
16460356 98 M Computación COMPUTACIÓN
16460935 98 M Ingeniería ING.CIVIL
16460935 98 M Ingeniería ING.ELECTRÓNICA
16461345 98 F Administración DISEÑO
16461632 98 F Ingeniería ING.ELECTRÓNICA
16461782 98 M Administración ADMINISTRACIÓN
16461942 98 F Administración ADMINISTRACIÓN
16462550 98 F Administración DISEÑO
16526872 98 F Administración ADMINISTRACIÓN
16562428 98 F Administración TURISMO
16591222 98 M Ingeniería ING.ELECTRÓNICA
16598638 98 M Ingeniería ING.ELECTRÓNICA
16619326 98 M Ingeniería ING.ELECTRÓNICA
16643686 98 F Administración DISEÑO
16669085 98 M Ingeniería ING.ELECTRÓNICA
16671158 98 M Ingeniería ING.ELECTRÓNICA
16672064 98 M Ingeniería ING.CIVIL
16673063 98 F Computación COMPUTACIÓN
16714532 98 M Ingeniería ING.ELECTRÓNICA
16726776 98 M Computación COMPUTACIÓN
16809959 98 F Administración DISEÑO
16811855 98 M Ingeniería ING.CIVIL
16813221 98 M Administración ADMINISTRACIÓN
16813226 98 M Ingeniería ING.ELECTRÓNICA
16813312 98 F Computación COMPUTACIÓN
16814237 98 M Ingeniería ING.ELECTRÓNICA
16814362 98 F Administración TURISMO
16814755 98 M Administración ADMINISTRACIÓN
16815001 98 M Administración ADMINISTRACIÓN
16815003 98 M Administración ADMINISTRACIÓN
16815317 98 M Ingeniería ING.ELECTRÓNICA
16821031 98 M Ingeniería ING.ELECTRÓNICA
16871695 98 M Administración ADMINISTRACIÓN
16875747 98 M Administración DISEÑO
16876857 98 F Administración DISEÑO
16878242 98 F Administración DISEÑO
16888687 98 M Ingeniería ING.ELECTRÓNICA
16889974 98 M Ingeniería ING.ELECTRÓNICA
16890393 98 M Computación COMPUTACIÓN
16890886 98 F Administración DISEÑO
16894801 98 M Administración TURISMO
16904464 98 M Computación COMPUTACIÓN
16924787 98 M Computación COMPUTACIÓN
16949123 98 F Ingeniería ING.ELECTRÓNICA
16970132 98 M Ingeniería ING.ELECTRÓNICA
16970383 98 F Administración DISEÑO
17012129 98 F Administración DISEÑO
17041337 98 M Ingeniería ING.ELECTRÓNICA
17064571 98 F Administración TURISMO
17076198 98 M Ingeniería ING.ELECTRÓNICA
17079981 98 M Ingeniería ING.ELECTRÓNICA
17080705 98 F Administración TURISMO
17085495 98 M Computación COMPUTACIÓN
17100526 98 M Computación COMPUTACIÓN
17100576 98 M Administración ADMINISTRACIÓN
17116541 98 M Computación COMPUTACIÓN
17118119 98 M Computación COMPUTACIÓN
17123061 98 M Ingeniería ING.ELECTRÓNICA
17123575 98 M Ingeniería ING.ELECTRÓNICA
17125462 98 M Administración ADMINISTRACIÓN
17141394 98 M Ingeniería ING.CIVIL
17142578 98 M Administración DISEÑO
17143610 98 M Administración ADMINISTRACIÓN
17144684 98 F Computación COMPUTACIÓN
17144837 98 M Computación COMPUTACIÓN
17146305 98 M Ingeniería ING.ELECTRÓNICA
17146345 98 M Ingeniería ING.ELECTRÓNICA
17268977 98 F Administración ADMINISTRACIÓN
17272811 98 M Ingeniería ING.ELECTRÓNICA
17286557 98 F Administración TURISMO
17300569 98 F Administración DISEÑO
17300905 98 M Ingeniería ING.ELECTRÓNICA
17303381 98 F Administración DISEÑO
17327539 98 F Administración TURISMO
17386064 98 M Computación COMPUTACIÓN
17400038 98 M Computación COMPUTACIÓN
17400183 98 F Administración TURISMO
17400363 98 F Administración TURISMO
17400703 98 F Administración DISEÑO
17401182 98 M Computación COMPUTACIÓN
17402101 98 M Ingeniería ING.ELECTRÓNICA
17441157 98 F Computación COMPUTACIÓN
17443350 98 F Administración DISEÑO
17514262 98 M Ingeniería ING.ELECTRÓNICA
17588079 98 M Administración DISEÑO
17641041 98 M Ingeniería ING.CIVIL
17641766 98 M Ingeniería ING.ELECTRÓNICA
17705778 98 F Administración TURISMO
17706228 98 F Administración DISEÑO
17706700 98 M Ingeniería ING.ELECTRÓNICA
17729979 98 F Administración DISEÑO
17775147 98 F Administración TURISMO
17803109 98 M Computación COMPUTACIÓN
17855193 98 M Ingeniería ING.CIVIL
17857723 98 M Ingeniería ING.ELECTRÓNICA
17925981 98 F Administración DISEÑO
17982531 98 M Ingeniería ING.ELECTRÓNICA
17983108 98 M Administración DISEÑO
18364306 98 M Administración ADMINISTRACIÓN
18588865 98 F Computación COMPUTACIÓN
19994418 98 M Administración ADMINISTRACIÓN
81988214 98 F Administración TURISMO
82142985 98 F Administración DISEÑO
82214811 98 M Computación COMPUTACIÓN

...fueron 181 registros lo cual es correcto para el periodo 98. Sin


embargo
no logro que me haga seis filas así:

PERIODO, CARRERA, PROGRAMA, TOTAL, TOTALHOMBRES, TOTALMUJERES

Gracias amigo!

Jo


"Javier Loria" escribió en el mensaje
news:
> Hola:
> Pueden ocurrir varias cosas, T lo calculas como un DISTINCT lo cual
> significa que solo cuentas las cedulas distintas, si COUNT(cedula) te da
un
> valor diferente podria ser que tengas repetidas. Adicionalmente puede


ser
> que tengas cedulas en Null, esto lo descubres con COUNT(*).
> Por ultimo se me ocurre que sexo pueda ser diferente de M y F.


Alguien
> puede interpretar que es la frecuencian del sexo: Diario, Semanal,
Mensual,
> etc. :) Cambia la condicion de Femenino a No Masculino o sea:


TF=SUM(CASE
> estudiante.sexo WHEN 'M' THEN 0 else 1 END)
> Eso es lo que se me ocurre, sin el esquema de las tablas, pero me da
la
> impresion que en M/F estas contanto matriculas de estudiantes de sexo
> Femenino y matriculas de estudiantes de sexo Masculino, y no estas
contando
> estudiantes.
> Saludos,
>
> Javier Loria
> Costa Rica
> Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
> que pueda ser copiado y pegado al Query Analizer.
> La version de SQL y Service Pack tambien ayuda.
> José G. Díaz U. escribio:
> > 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
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida