Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Contar registros de una tabla consultando una condición que esta en otra.

Estas en el tema de Contar registros de una tabla consultando una condición que esta en otra. en el foro de Bases de Datos General en Foros del Web. Pues bien, lo que sucede es que tengo dos tablas: Facturas (Numero, CodigoCliente, TipoFactura) en donde: Numero = Codigo de la factura CodigoCliente = Codigo ...
  #1 (permalink)  
Antiguo 08/08/2010, 19:19
 
Fecha de Ingreso: septiembre-2009
Ubicación: Grecia, Costa Rica
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Contar registros de una tabla consultando una condición que esta en otra.

Pues bien, lo que sucede es que tengo dos tablas:

Facturas (Numero, CodigoCliente, TipoFactura)
en donde:
Numero = Codigo de la factura
CodigoCliente = Codigo Unico asignado al cliente con el que se relaciona con la tabla clientes
TipoFactura = Tiene dos estados: Contado o Credito.

Factura_Credito (Numero, Estado)
en donde:
Numero = Código de la factura con el que se relaciona con la tabla de Facturas
Estado = tiene dos estados Cancelada o pendiente.

* Las tablas tienen mas campos pero para el caso que quiero consultar es suficiente.


Ahora, lo que deseo es hacer una consulta que me arroje la cantidad de registros que hay en la tabla Facturas cuyo TipoFactura sea Credito, pero que a su vez el campo Estado en la tabla de Facturas_Credito sea pendientes.

En pocas palabras lo que necesito saber es cuantas facturas de credito tiene pendiente un cliente para que el programa haga o no haga determinada acción.

Hice lo siguiente pero no me funciona, me da error:

"SELECT COUNT(*) as Factura.Numero
FROM Facturas
INNER JOIN Facturas_Credito TO Facturas.Numero = Facturas_Credito.Numero WHERE Facturas.CodigoCliente ='" & Text5 & "' And Facturas.TipoFactura = 'Credito' And Facturas_Credito.Estado = 'Pendiente'"

Las comillas son propias del VB6 que es el lenguaje que estoy usando, y Text5 contiene el código del cliente que estoy consultando.


Si alguien me pudiera ayudar lo agradecería muchísimo, estoy atorado aquí desde hace rato.
  #2 (permalink)  
Antiguo 08/08/2010, 21:35
 
Fecha de Ingreso: noviembre-2009
Mensajes: 10
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Contar registros de una tabla consultando una condición que esta en otra.

Hola!

Si no me equivoco el error está en la sentencia TO, en su lugar se usa el ON. Tu consulta quedaría así:


"SELECT COUNT(*) as Factura.Numero
FROM Facturas
INNER JOIN Facturas_Credito ON Facturas.Numero = Facturas_Credito.Numero WHERE Facturas.CodigoCliente ='" & Text5 & "' And Facturas.TipoFactura = 'Credito' And Facturas_Credito.Estado = 'Pendiente'"

Saludos!
  #3 (permalink)  
Antiguo 09/08/2010, 19:50
 
Fecha de Ingreso: septiembre-2009
Ubicación: Grecia, Costa Rica
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Contar registros de una tabla consultando una condición que esta en otra.

Gracia por responder.

...pero no, me sigue dando un error, sólo que es uno que ya había superado. Alguna otra idea?
  #4 (permalink)  
Antiguo 09/08/2010, 20:02
 
Fecha de Ingreso: septiembre-2009
Ubicación: Grecia, Costa Rica
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Contar registros de una tabla consultando una condición que esta en otra.

..O si alguien tiene otra forma de hacerlo.
Cualquier sugerencia es bienvenida.
  #5 (permalink)  
Antiguo 09/08/2010, 20:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Contar registros de una tabla consultando una condición que esta en otra.

Cita:
Ahora, lo que deseo es hacer una consulta que me arroje la cantidad de registros que hay en la tabla Facturas cuyo TipoFactura sea Credito, pero que a su vez el campo Estado en la tabla de Facturas_Credito sea pendientes.

En pocas palabras lo que necesito saber es cuantas facturas de credito tiene pendiente un cliente para que el programa haga o no haga determinada acción.
Código MySQL:
Ver original
  1. SELECT COUNT(*) Numero
  2. FROM Facturas F INNER JOIN Facturas_Credito FC ON F.Numero = FC.Numero
  3.      F.TipoFactura = 'Credito'
  4.      AND C.Estado = 'Pendiente'
  5.      AND F.CodigoCliente = '" & Text5 & "';
Esta consulta te tiene que devolver lo que pides, en tanto y en cuanto Text5 contenga un valor real. De lo contrario no devolverá nada o devolverá un error.

Por otro lado, sería buena idea que si la consulta devuelve un error nos dijeses exactamente qué error devuelve, porque sin saber eso no podemos deducir a simple vista si el error es de sintaxis, de lógica, de tipos o de tablas...

Tienes que ser específico.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 10/08/2010, 19:40
 
Fecha de Ingreso: septiembre-2009
Ubicación: Grecia, Costa Rica
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Contar registros de una tabla consultando una condición que esta en otra.

Ya lo resolví, funciona perfectamente.
Gracias gnzsoloyo.

En realidad utilicé la consulta que tu sugeriste, haciendo dos pequeñas modificaciones de sintaxis, que son el "as" entre COUNT(*) y Numero y el FC.Estado en vez de C.Estado ya que tu mismo definiste el FC.

La consulta quedaría así:

SELECT COUNT(*) as Numero
FROM Facturas F INNER JOIN Facturas_Credito FC ON F.Numero = FC.Numero
WHERE
F.TipoFactura = 'Credito'
AND FC.Estado = 'Pendiente'
AND F.CodigoCliente = '" & Text5 & "';

Una observación muy acertarla por parte de gnzsoloyo es el valor que debe necesariamente tener Text5.

En mi caso este código no se ejecuta hasta tanto Text5 no tenga un valor real y existente en la base de datos, por lo que si alguien la utiliza debe tener esa consideración.

Gracias y espero que a alguien más le sirva.

Etiquetas: condición, contar, registros, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:43.