SQL Server - Duda Case When

 
Vista:
sin imagen de perfil

Duda Case When

Publicado por Gaston (1 intervención) el 27/11/2013 23:37:56
Hola, antes que nada gracias por la ayuda!.

Paso a explicar: Tengo una tabla "Pacientes", una tabla "Encabezado Pagos" y una detalle.
Lo que tengo que hacer es un listado de todos aquellos pacietnes que tienen Deudas.
El encabezado pago, basicamente tiene un Concepto y un Total (por ejemplo, Consulta Medica - $500).
El detalle, son los pagos que el paciente va haciendo sobre ese encabezado, pueden ser varios registros ya que se puede pagar en partes.

La query que estoy haciendo, intenta mostrar Nombre de Paciente, Id, Telefono, y ese MONTO que debe.

select Pacientes.idPaciente, PAcientes.Nombre, Pacientes.telefono, Encabezado_Pagos.id,
CASE WHEN (select COUNT(*) from detalle_pagos where Detalle_Pagos.id_encabezado = Encabezado_Pagos.id and Detalle_Pagos.estado = 'Activo') > 0
THEN
(select SUM(total) from Encabezado_Pagos where Paciente = Pacientes.idPaciente and Encabezado_Pagos.estado = 'Activo')
-
(select SUM(monto_entregado) from Detalle_Pagos where Detalle_Pagos.id_encabezado = Encabezado_Pagos.id and Detalle_Pagos.estado = 'Activo')
ELSE
(select SUM(total) from Encabezado_Pagos where Paciente = Pacientes.idPaciente and Encabezado_Pagos.estado = 'Activo')
End As Deuda
from Encabezado_Pagos
inner join Pacientes on Encabezado_Pagos.paciente = pacientes.idPaciente
inner join Detalle_Pagos on Encabezado_Pagos.id = Detalle_Pagos.id_encabezado

La query funciona barbaro, pero cuando en Detalle_Pagos no existe el registro, no me devuelve nada. Cuando en detalle pagos hay al menos un pago asociado al encabezado, funciona barbaro. Supongo que no esta andando bien la parte del "ELSE" (Si no hay registro, que reste "0").

Saludos y gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Duda Case When

Publicado por Isaias (4558 intervenciones) el 28/11/2013 19:24:19
No se que nivel de respuesta tenga tu query, pero siento que deberá ser muy lento.

En lo personal, yo haría 2 funciones de usuario

1.- Que me sume el total de los activos (encabezado), para saber, cuanto me debe
2.- Que me sume el total de los detalles, para saber cuanto me ha pagado, si no existe, que me regrese un CERO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda Case When

Publicado por jams (93 intervenciones) el 29/11/2013 21:39:46
si estas menejando sumas de registros revisa las opciones de cube y rollup que tiene sql server, ojala y te puedan servir.






Saludos y suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar