hola tengo un lijero problema de logica con una tabla. Tengo un punto de venta y ahora estoy programando un sistema de reportes de transaccione que obtiene los datos de la base de datos del punto de venta. El sistema acepta dobles pagos, es decir si una persona quere pagar una cantidad X con efectivo y la otra con tarjeta. La estructura con la que se estan guardando las transacciones en la base de datos me es dificil poder obtener cuantos fueron con tarjetas y cuando con efectivo. voy a poner un ejemplo de como se guardan en la DB de una transaccion con dos pagos y dos productos comprados.
tabla sales
fecha id_venta id_empleado id_cliente
2013-03-18 1 2 3
tabla sales_item
id_venta id_producto precio cantidad
1 5 60 1
1 6 30 1
tabla sales_pagos
id_venta tipo_pago monto_recibido
1 efectivo 50
1 tarjeta 50
Con esta estructura tengo problemas al tratar de obtener cuantos fueron con efectivo y tarjeta. Este es el query que utilizo
SELECT SUM( si.precio * si.cantidad) AS totalEfectivo
FROM sales_item si
JOIN sales_pagos sp ON sp.id_venta = si.id_venta
JOIN sales s on s.id_venta=sp.id_venta
JOIN employees oe ON s.employee_id = oe.person_id
WHERE oe.username = 'caja1'
AND sp.tipo_pago = 'Efectivo'
AND s.fecha between timestamp('2013-03-18') and timestamp('2013-03-18')
el objetivo de esto es que un cajero pueda cuadrar su caja, pero cuando existen dobles pagos el query me suma los que son de efectivo y los que son de tarjeta al mismo tiempo.Este query me devuelve
totalEfectivo
90
y este query que es el mismo pero ahora cambiandole el filtro a tipo de pa;go por tarjeta
SELECT SUM( si.precio * si.cantidad) AS totaltarjeta
FROM sales_item si
JOIN sales_pagos sp ON sp.id_venta = si.id_venta
JOIN sales s on s.id_venta=sp.id_venta
JOIN employees oe ON s.employee_id = oe.person_id
WHERE oe.username = 'caja1'
AND sp.tipo_pago = 'Tarjeta'
AND s.fecha between timestamp('2013-03-18') and timestamp('2013-03-18')
me devuelve
totaltarjeta
90
y entiendo porque. Es porque tienen el mismo id_venta en la tabla de item como en la de pagos entonces los pagos de efectivos se ven como tarjetas tambien y viceversa. Es decir el query esta haciendo lo correcto pero no es eso lo que quiero. Lo que quiero es que me lo muestro asi.
totalEfectivo