Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

case problemon para mi

Estas en el tema de case problemon para mi en el foro de SQL Server en Foros del Web. hola amigos... como estan? aca tengo un problema que no le encuentro la vuelta y lo que necesito es que me muestre en sql todos ...
  #1 (permalink)  
Antiguo 29/08/2011, 21:31
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
case problemon para mi

hola amigos... como estan? aca tengo un problema que no le encuentro la vuelta y lo que necesito es que me muestre en sql todos los alumnos de un curso y me tiene que traer id_alumno, nombre, apellido, sumar faltas tanto jutificadas, como injutificadas y el total de faltas ... en caso de tener asistencia perfecta solo me tendra que salir solamente id_alumno, nombre, apellido... pero a mi me salen solamente las que tienen inasistencias :( necesito que me ayude a traer todas ya que no encuentro mi error.. gracias amigos.


les paso el codigo...

Código PHP:
select a.id_alumno,a.apellido,a.nombre,m.condicion ,
sum(case when e.id_estado=1  then cast(i.cantidad AS decimal(10,1))else 0 end) AS JUSTIFICADAS,
sum(CASE WHEN e.id_estado=2  then cast(i.cantidad AS decimal(10,1))else 0 end) AS INJUSTIFICADAS,
sum(CAST(i.cantidad as decimal(10,1))) as TOTAL
from alumnos a 
inner join  matriculas m on m
.id_alumno a.id_alumno 
inner join  inasistenciasA i on i
.id_alumno a.id_alumno
inner join motivos mo on mo
.id_motivoi.id_motivo
inner join estados e on e
.id_estadoi.id_estado
inner join AsistenciaCurso ac on ac
.id_curso m.id_curso
where m
.id_curso ='1aCB' and (i.fecha <= '29/08/2011' and i.fecha >= '29/08/2011')and i.añoCursado 2011 
group by a
.id_alumno,a.apellido,a.nombre,m.condicion 

Para mi el problema esta en case ya que los estados que existen son 1 y 2 cuando tienen inasistencia... pero cuando id estado en null tanto en justificadas e injustificadas no me trae al alumno
  #2 (permalink)  
Antiguo 30/08/2011, 07:57
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: case problemon para mi

Tu problema no es con los cases es con tus inner join, si dices que si un alumno no tiene faltas no lo trae es porque al hace el inner tiene que existir en las 2 tablas prueba haciendo un left join con la tabla de inasistencias y nos cuentas que paso :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 30/08/2011, 10:46
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: case problemon para mi

Cita:
Iniciado por Libras Ver Mensaje
Tu problema no es con los cases es con tus inner join, si dices que si un alumno no tiene faltas no lo trae es porque al hace el inner tiene que existir en las 2 tablas prueba haciendo un left join con la tabla de inasistencias y nos cuentas que paso :)

Saludos!

GRacias amiga, usted siempre ayudando, sabes me sigue trayendo los mismos datos.. le doy vuelta y vuelta y nada... ojala me puedas seguir dando consejos :D mil Gracias
  #4 (permalink)  
Antiguo 30/08/2011, 11:29
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: case problemon para mi

ya esta resuelto amiga muchisimas gracias... y tenias razon vos con el left.. se los cambie en tres inner join que estaban relacionadas a la tabla inasistencia y en where habia hecho algo mal por que ponia i.fecha (referenciando a inasistenciaA) y lo cambie por ac. fecha (que guarda todas las inasistencias y asistencias del todos los dias)

en fin quedo asi.. (por las dudas alguien tenga algo parecido)

Código PHP:
select m.id_alumno,a.apellido,a.nombre,m.condicion ,
sum(case when e.id_estado=1 then cast(i.cantidad AS decimal(10,1)) end) AS JUSTIFICADAS,
sum(CASE WHEN e.id_estado=2 then cast(i.cantidad AS decimal(10,1)) end) AS INJUSTIFICADAS,
sum(  CAST(i.cantidad as decimal(10,1))) as TOTAL
from alumnos a
inner join matriculas m on  a
.id_alumno =m.id_alumno
left join inasistenciasA i on  a
.id_alumno=i.id_alumno
left join motivos mo on mo
.id_motivoi.id_motivo
left join estados e on e
.id_estadoi.id_estado
inner join AsistenciaCurso ac on ac
.id_curso m.id_curso
where m
.id_curso ='1aCB' and ac.fecha <= '30/08/2011' and ac.fecha >= '20/08/2011' 
group by m.id_alumno,a.apellido,a.nombre,m.condicion 

De nuevo muchisimas gracias por tu tiempo :D
  #5 (permalink)  
Antiguo 30/08/2011, 11:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: case problemon para mi

Ya probaste con left join en todas tus tablas??? ....un poco tarde la respuesta :) que bien que ya te salieron tus datos :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 30/08/2011, 15:46
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: case problemon para mi

te vas a enojar pero no se termino de solucionar... habia un error en el codigo que pensaba que estaba bien por que me tomaba todas las fechas pero me traia todos los alumnos.. ahora me trae bien por fechas pero me sigue sin traer los nombres de todos los alumnos.. este procedimiento me va a volver loco Libra :(

mira como queda... ayudame analizarlo por favor que vos la haces de goma a sql


Cita:


select a.id_alumno,a.apellido,a.nombre,m.condicion ,
sum(case when i.id_estado= 1 then cast(i.cantidad AS decimal(10,1))else 0 end) AS JUSTIFICADAS,
sum(CASE WHEN i.id_estado=2 then cast(i.cantidad AS decimal(10,1))else 0 end) AS INJUSTIFICADAS,
sum(CAST(i.cantidad as decimal(10,1))) as TOTAL
from alumnos a
inner join matriculas m on m.id_alumno =a.id_alumno
left join inasistenciasA i on m.id_alumno=i.id_alumno
left join estados e on e.id_estado= i.id_estado
left join AsistenciaCurso ac on ac.fecha = i.fecha
where ac.id_curso ='1aCB' and (ac.fecha <= '30/08/2011' and ac.fecha >= '30/08/2011' ) and ac.añoCursado=2011
group by a.id_alumno,a.apellido,a.nombre,m.condicion

  #7 (permalink)  
Antiguo 30/08/2011, 15:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: case problemon para mi

Ya probaste con left join en todas tus tablas??? las condiciones en tu where estan bien??? si te fijas estas filtrando todo por AsistenciaCurso esto esta correcto??

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 30/08/2011, 16:01
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: case problemon para mi

Cita:
Iniciado por Libras Ver Mensaje
Ya probaste con left join en todas tus tablas??? ....un poco tarde la respuesta :) que bien que ya te salieron tus datos :)

Saludos!
Cita:
Iniciado por Libras Ver Mensaje
Ya probaste con left join en todas tus tablas??? las condiciones en tu where estan bien??? si te fijas estas filtrando todo por AsistenciaCurso esto esta correcto??

Saludos!
Si a mi me parece estar todo bien.. y filtro por asistencia curso cuando guardo los datos en asistencia curso se guardan todas las asistencias e inasistencias por curso y por fecha... pero en inasistenciasA solo se guardan las inasistencias de los alumnos.. me entendes Libra?
  #9 (permalink)  
Antiguo 30/08/2011, 16:15
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: case problemon para mi

Pon algunos datos de ejemplo de tus tablas y que es lo que quieres lograr :)

Saludos!!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 30/08/2011, 16:17
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: case problemon para mi

Cita:
Iniciado por Libras Ver Mensaje
Pon algunos datos de ejemplo de tus tablas y que es lo que quieres lograr :)

Saludos!!!
Te envia una solicitud al msn.. si podes y queres agregame xq si te paso las cosas por aca mas la explicacion capaz te mareo je

Etiquetas: case, problemon, sentencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:10.