Es para un programa de gestión de expedientes de morosos.
Cada expediente tiene uno o varios contrarios (o morosos)
Cada vez que un contrario hace un pago se mete un apunte en el expediente que incluye: fecha, cantidad y concepto.
Los conceptos siempre son iguales. Pongamos A, B, C y D para simplificar.
Un ejemplo:
Expediente: 12345
Contrario1: Paco
Contrario2: Manolo
------Fecha--------------------Concepto----------------Cantidad
Pago1: 01/01/2016--------------A-----------------------5€
Pago2: 02/01/2016--------------A-----------------------10€
Pago3: 08/01/2016--------------B-----------------------30€
Pago4: 15/01/2016--------------B-----------------------40€
Necesito una consulta que me muestre la suma de las cantidades según el concepto.
Debería devolverme esto:
Expediente: 12345
Contrario: Paco
----------Cantidad----Concepto
Pago1: ----15€---------A
Pago3: ----70€---------B
El problema es que también necesito que me muestre el contrario, y cuando el mismo expediente tiene 2 contrarios, pues repite los resultados, o me suma 2 veces las cantidades, según como lo agrupe. Con las pruebas que estoy haciendo ahora me salen esto:
Expediente: 12345
Contrario: Paco
----------Cantidad----Concepto--Contrario
Pago1: ----15---------A---------Paco
Pago3: ----70---------B---------Paco
Pago1: ----15---------A---------Manolo
Pago3: ----70---------B---------Manolo
o Esto (fijaos que duplica las cantidades)
Expediente: 12345
Contrario: Paco
----------Cantidad----Concepto--Contrario
Pago1: ----30---------A---------Paco
Pago3: ----140--------B---------Paco
¿Cómo puedo evitar esto? Con que salga uno de los 2 contrarios me sirve.
La estructura de la BD:
expedien (nexp): contiene el número de expediente
pagos(nexp,npagos): relaciona el expediente con los pagos
linpag(npagos,descripcio,concepto,fecha,cantidad): contiene los datos de los pagos
conexp(nexp,ncon): relacion los contrarios con el expediente
contra(ncon,nombre): contiene los datos del contrario
La consulta que tengo hasta ahora es esta:
Código SQL:
Me funciona si solo hay un contrario en el expediente pero si hay varios pasa lo que comenté antes, que varía en funciona de si pongo o quito el group by contra.nombre.Ver original
SELECT expedien.nexp,linpag.descripcio,linpag.concepto,SUM(linpag.cantidad),contra.nombre FROM expedien LEFT JOIN pagos ON expedien.nexp=pagos.nexp LEFT JOIN linpag ON pagos.npagos=linpag.npagos LEFT JOIN conexp ON expedien.nexp=conexp.nexp LEFT JOIN contra ON conexp.ncon=contra.ncon WHERE (linpag.fecha > CAST("2016/01/01" AS DATE)) GROUP BY linpag.concepto, contra.nombre
¿Cómo puedo solucionarlo?
Gracias de antemano.