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

Problemas con el codigo

Estas en el tema de Problemas con el codigo en el foro de SQL Server en Foros del Web. hola amigos genios, disculpen que los moleste pero no me sale una cosulta en sql.. resulta que tengo una base de datos con dos 4 ...
  #1 (permalink)  
Antiguo 09/08/2011, 11:18
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Problemas con el codigo

hola amigos genios, disculpen que los moleste pero no me sale una cosulta en sql.. resulta que tengo una base de datos con dos 4 tablas que necesito tomar.. una se llama INASISTENCIAa que tiene(id_alumno, id_estado, id_motivo, cantidad, fecha y añoCursado), la otra tabla se llama ALUMNOS(id_alumno, nombre, apellido), MOTIVO(id_motivo, descripcion) y ESTADO "se refiere a si son justificadas o injustificadas .. 1 = justificada, 2 = injustificada" (id_estado, decripcion).
Bueno que necesito hacer es que el usuario al señalar dos fechas (que lo hace a travez de unos datatime en visual) me seleccione id_alumno, nombre, apellido.. y que me sume la cantidad de inasistencias justificadas por un lado las injustificadas por otra y despues en una tercer columna el total de faltas).

en resumen quedaria asi el pedido.. id_alumno, apellido, nombre, justificadas(la suma) injusticada(suma) y total (justificadas + injustificadas).. la verdad no se si es por la hora o que pero no me sale el de sumar todas las justificadas y las injustificadas cada una por su lado.. si alguien puede ayudarme se lo agradeceria por que me trabe ahi.. muchas gracias genios y disculpen la molestia



PD: la columna "cantidad" de la TAbla inasistenciasA hace referencia a la cantidad de faltas (1 o 0.5) eso se lo ingresa el usuario y despues pone si esa cantidas son justificadas o injustificadas
  #2 (permalink)  
Antiguo 09/08/2011, 11:25
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con el codigo

¿Que avance llevas con tu codigo?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 09/08/2011, 11:34
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: Problemas con el codigo

Pues seria hacer algo asi

select
id_alumno,apellido,nombre
case
when i.idestado=1 then sum(1) end as justificadas,
case
when i.idestado=2 then sum(1) end as injustificadas,
sum(i.cantidad)
from alumnos A
inner join inasistencias I on (a.id=I.id)
group by id_alumno,apellido,nombre,cantidad


Nada mas acomodalo a tu requerimiento


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

voy a modificarlo como tu dices amiga... y veo si me sale ya que tengo que sumar las cantidades primero dividiendo si son justificadas o insjutificadas y despues el total.. pero al total lo puedo hacer en vb.net :D cualquier cosa les aviso :D muchisimas gracias
  #5 (permalink)  
Antiguo 09/08/2011, 12:20
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problemas con el codigo

select i.id_alumno,a.apellido,a.nombre
case when i.idestado=1 then sum(i.cantidad) end as justificadas,
case when i.idestado=2 then sum(i.cantidad) end as injustificadas, sum(i.cantidad)
from alumnos a
inner join matriculas m on m.id_alumno = a.id_alumno
inner join inasistenciasA i on i.id_alumno = m.id_alumno
inner join motivos mo on mo.id_motivo= i.id_motivo
inner join estados e on e.id_estado= i.id_estado

group by i.id_alumno,a.apellido,a.nombre,i.cantidad

Libras me tira muchos errores como vos decis en sql.. lo que nunca habia visto es el comando case y wen en sql :(
  #6 (permalink)  
Antiguo 09/08/2011, 12:23
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con el codigo

SUM(CASE WHEN i.idestado=1 THEN cantidad END) AS JUSTIFICADAS,
SUM(CASE WHEN i.idestado=2 THEN cantidad END) AS INJUSTIFICADAS
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 09/08/2011, 12:25
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problemas con el codigo

Cita:
Iniciado por iislas Ver Mensaje
SUM(CASE WHEN i.idestado=1 THEN cantidad END) AS JUSTIFICADAS,
SUM(CASE WHEN i.idestado=2 THEN cantidad END) AS INJUSTIFICADAS
haber ahi te digo iislas
  #8 (permalink)  
Antiguo 09/08/2011, 12:48
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problemas con el codigo

una ultima pregunta.. alguien si se puede transformar los datos de una columna nvarchar a decimal.. por ejemplo la tabla cantidad esta en varchar ya el usuario puede ingresar dos valores 1 y 0.5 pero si lo pongo en decimal me tira error... pero ahora cuando quiero sumar no me deja por que dice que es un dato varchar y la propiedad sum no lo toma.. me va volver loco esto :(
  #9 (permalink)  
Antiguo 09/08/2011, 13:07
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con el codigo

Eso pasa por no colocar los datos en sus correspondientes tipos, ¿que tiene que hacer un DECIMAL en un varchar?

SUM(CASE WHEN i.idestado=1 THEN CAST(cantidad AS DECIMAL(10,2) END) AS JUSTIFICADAS,
SUM(CASE WHEN i.idestado=2 THEN CAST(cantidad AS DECIMAL(10,2) END) AS INJUSTIFICADAS
__________________
MCTS Isaias Islas
  #10 (permalink)  
Antiguo 09/08/2011, 13:10
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problemas con el codigo

Cita:
Iniciado por iislas Ver Mensaje
Eso pasa por no colocar los datos en sus correspondientes tipos, ¿que tiene que hacer un DECIMAL en un varchar?

SUM(CASE WHEN i.idestado=1 THEN CAST(cantidad AS DECIMAL(10,2) END) AS JUSTIFICADAS,
SUM(CASE WHEN i.idestado=2 THEN CAST(cantidad AS DECIMAL(10,2) END) AS INJUSTIFICADAS
jajaj no me retes hermano, lo que pasa que a mi me envian lo que tengo que programar y no puedo modificar las tablas ni nada.. mil disculpas
  #11 (permalink)  
Antiguo 09/08/2011, 13:12
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con el codigo

Nunca, mencione que TU (luisito1), fuera el culpable del diseño, ¿cierto?
__________________
MCTS Isaias Islas
  #12 (permalink)  
Antiguo 09/08/2011, 13:13
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problemas con el codigo

Cita:
Iniciado por iislas Ver Mensaje
Nunca, mencione que TU (luisito1), fuera el culpable del diseño, ¿cierto?
jajaja no hermano pero vos sos al unico que conoces es a mi.. y solo te queria aclarar xq yo no soy el que diseña ni nada.. yo cargo con el paquete muerto nomas :(
  #13 (permalink)  
Antiguo 09/08/2011, 13:16
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con el codigo

No te preocupes, a muchos nos queda claro que los que vienen a consultar aca, ni siquiera participaron en el proyecto inicial.

Aclarado el punto, ¿te funciono el codigo?
__________________
MCTS Isaias Islas
  #14 (permalink)  
Antiguo 09/08/2011, 13:21
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problemas con el codigo

Cita:
Iniciado por iislas Ver Mensaje
No te preocupes, a muchos nos queda claro que los que vienen a consultar aca, ni siquiera participaron en el proyecto inicial.

Aclarado el punto, ¿te funciono el codigo?

Me quedo asi:

Cita:
@curso as nvarchar(10),
@fechaD as char(10),
@fechaH as char(10)
as

select a.id_alumno,a.apellido,a.nombre,m.condicion,
case when i.id_estado=1 then SUM(CAST( i.cantidad as decimal(10,2))) end as justificadas,
case when i.id_estado= 2 then sum(CAST( i.cantidad as decimal(10,2))) end as injustificadas, sum(CAST( i.cantidad as decimal(18,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 = m.id_alumno
inner join motivos mo on mo.id_motivo= i.id_motivo
inner join estados e on e.id_estado= i.id_estado
where m.id_curso =@curso and (i.fecha <= @fechaH and i.fecha >= @fechaD)
group by a.id_alumno,a.apellido,a.nombre,m.condicion, i.id_estado,i.cantidad
  #15 (permalink)  
Antiguo 09/08/2011, 13:58
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problemas con el codigo

ultima consulta sobre este tema ya que me tira un error

la idea es que quede la cantidad de justificadas e injustifidas y el total en una sola fila y aca me la esta tirando en dos


o sea mi intencion es que quede asi


justificadas injutificadas total
----- 1 ------- 0.5 ---- 1.5



y me esta quedando asi

justificadas injutificadas total
-----1 ---------------- 1

justificadas injutificadas total
---------- 0.5 --------0.5



ayudenme en esta y los dejo completamente tranquilos amigo :(
  #16 (permalink)  
Antiguo 09/08/2011, 14:18
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con el codigo

Entonces coloque el CASE en una sola linea....no haga 2 case.......
__________________
MCTS Isaias Islas
  #17 (permalink)  
Antiguo 09/08/2011, 15:08
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problemas con el codigo

Cita:
Iniciado por iislas Ver Mensaje
Entonces coloque el CASE en una sola linea....no haga 2 case.......
si pero me tira error o capaz lo estoy haciendo mal.. de la forma que lo hice es muy nuevo y la verdad no se como seria los case en sql amigo
  #18 (permalink)  
Antiguo 09/08/2011, 15: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: Problemas con el codigo

Pues a buscar en san google como es la sintaxis del case en sql :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #19 (permalink)  
Antiguo 09/08/2011, 15:16
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problemas con el codigo

Cita:
Iniciado por Libras Ver Mensaje
Pues a buscar en san google como es la sintaxis del case en sql :)
Si eso estoy haciendo Libras ;) muchas gracias :D
  #20 (permalink)  
Antiguo 09/08/2011, 15:37
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con el codigo

Libras, que le ha pasado, usted siempre tan lleno de emocion por contestar a todas las preguntas.

Si ESTADO, solo tiene dos valores 1 y 2, entonces

case when i.id_estado=1 then SUM(CAST( i.cantidad as decimal(10,2))) ELSE
sum(CAST( i.cantidad as decimal(10,2))) END
__________________
MCTS Isaias Islas
  #21 (permalink)  
Antiguo 09/08/2011, 16:18
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problemas con el codigo

mira como lo sacamos entre todos (va mas ustedes que yo) esa es la verdad

@curso as nvarchar(10),
@fechaD as char(10),
@fechaH as char(10)
as
select a.id_alumno,a.apellido,a.nombre,m.condicion,
sum(case when i.id_estado=1 then cast(i.cantidad AS decimal(18,1))end) AS JUSTIFICADAS,
sum(CASE WHEN i.id_estado=2 then cast(i.cantidad AS decimal(18,1)) end) AS INJUSTIFICADAS,
sum(CAST(i.cantidad as decimal(18,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 = m.id_alumno
inner join motivos mo on mo.id_motivo= i.id_motivo
inner join estados e on e.id_estado= i.id_estado
where m.id_curso =@curso and (i.fecha <= @fechaH and i.fecha >= @fechaD)
group by a.id_alumno,a.apellido,a.nombre,m.condicion

Etiquetas: erroren, unafuncion
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 02:30.