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
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
0