Foros del Web » Programación para mayores de 30 ;) » .NET »

Case en sql problemon para mi

Estas en el tema de Case en sql problemon para mi en el foro de .NET 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, 19:46
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 15 años, 6 meses
Puntos: 2
Pregunta Case en sql 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

Última edición por luisito1; 29/08/2011 a las 19:51 Razón: para completar el tema
  #2 (permalink)  
Antiguo 30/08/2011, 07:14
 
Fecha de Ingreso: agosto-2011
Mensajes: 14
Antigüedad: 13 años, 4 meses
Puntos: 4
Respuesta: Case en sql problemon para mi

Prueba con esto

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_motivo= i.id_motivo
left join estados e on e.id_estado= i.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
  #3 (permalink)  
Antiguo 30/08/2011, 10:38
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Case en sql problemon para mi

Cita:
Iniciado por cricrina19 Ver Mensaje
Prueba con esto

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_motivo= i.id_motivo
left join estados e on e.id_estado= i.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
ante todo muchisimas gracias por tu tiempo.. te comento que me trae lo mismos datos y no entiendo por que... me alegraria mucho que me siguieras ayudando a ver si podemos sacar esta consulta que me esta superando.. muchas gracias
  #4 (permalink)  
Antiguo 30/08/2011, 11:28
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Case en sql problemon para mi

ya esta resuelto amigo 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

Etiquetas: ensentencia, problemon, sql-server
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 07:12.