MySQL - Consultando tres tablas.

 
Vista:

Consultando tres tablas.

Publicado por Byrpa (6 intervenciones) el 18/03/2014 05:06:02
Hola a tod@s, resulta que les pido su ayuda. Realice un programa de contabilidad y hasta ahora todo bien. Pero en uno de los reportes necesitan un cambio, el cual me ha dejado estancado ya que tengo que agregar una tercera tabla a la consulta y me he quedado parado. El entorno es el siguiente tengo tres tablas las cuales van asi (omitire los campos que no entran en la consulta):

cuentas:
cuenta vc(10)
nombre vc(10)
debehaber vc(1)

movimientos:
cuenta vc(10)
debe decimal(12,2)
haber decimal(12,2)
fecha1 date
poliza vc(12)

Polizas
numero vc(12)
tipo vc(2)

La consulta que esta funcionando es la siguiente:
Código:

1
2
3
4
5
6
select a.cuenta,a.nombre,
 
if(a.debehaber='D',ifnull((select sum(debe-haber) from movimientos b where fecha1 between '" + dFecha1 + "' and '" + dFecha2 + "' and a.cuenta=b.cuenta ),0.00),0.00) as debe1,
if(a.debehaber='H',ifnull((select sum(haber-debe) from movimientos b where fecha1 between '" + dFecha1 + "' and '" + dFecha2 + "' and a.cuenta=b.cuenta ),0.00),0.00) as haber1
 
from cuentas a where nivel=5"


(toda la consulta esta en una linea, para efectos que se entienda le di unos enteres)

Pero ahora necesito que si la poliza es de tipo="CI", que no me sume ni me reste ese movimiento.

Alquien me puede dar una manita, por favor.

Saludos cordiales,

byrpa
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 xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Consultando tres tablas.

Publicado por xve (1151 intervenciones) el 18/03/2014 08:58:37
Hola Byrpa, si añades al where esa condición no te sirve?

1
... from cuentas a where nivel=5 AND tipo<>'CI'"

Coméntanos, ok?
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

Consultando tres tablas.

Publicado por Byrpa (6 intervenciones) el 18/03/2014 23:44:58
Hola xve, gracias por tu pronta respuesta. Fijate que que el problema que tengo que el campo "tipo", esta en la tabla llamada polizas, la cual aun no esta, en la consulta inicial.

En la tabla movimientos existe un campo llamado poliza que es la que puede enlazar al campo numero de la tabla poliza, que es en esa tabla de "poliza" en donde se encuentra el campo "tipo".

Gracias por atenta respuesta, si pudieras ayudarme te lo agradeceria mucho.

Saludos cordiales,

Byrpa
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
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Consultando tres tablas.

Publicado por xve (1151 intervenciones) el 19/03/2014 08:20:15
Hola Byrpa, mil perdones, no me di cuenta.

La manera que se me ocurre, es que vincules las dos tablas, pero no se muy bien por que campo se viculan... algo así:
1
2
3
4
5
6
7
8
select a.cuenta,a.nombre,
 
if(a.debehaber='D',ifnull((select sum(debe-haber) from movimientos b where fecha1 between '" + dFecha1 + "' and '" + dFecha2 + "' and a.cuenta=b.cuenta ),0.00),0.00) as debe1,
if(a.debehaber='H',ifnull((select sum(haber-debe) from movimientos b where fecha1 between '" + dFecha1 + "' and '" + dFecha2 + "' and a.cuenta=b.cuenta ),0.00),0.00) as haber1
 
from cuentas a LEFT JOIN Polizas p ON a.____=p.____
 
where a.nivel=5" AND p.tipo<>'CI'"

Lo que no se que campo de cuentas vincula con Polizas... o hay que utilizas la tabla intermedia movimientos? que veo que vincula las otras dos tablas?
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

Consultando tres tablas.

Publicado por byrpa (6 intervenciones) el 19/03/2014 21:57:02
Gracias, la vinculacion es entre movimientos.polizas y polizas.numero, en la tabla cuentas la uso para sacar el nombre y si debehaber="H" o "D" de movimientos.

Gracias de nuevo por tu respuesta,

Saludos.
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