| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Lun 15 Jun, 2009 7:32 pm Asunto: Where con los resultados de otra tabla |
|
|
Buenas a todos,
Mi preguntita es la siguiente, tengo los resultados en una Query de por ejemplo clientes, tengo los IDCliente, pueden ser 1, 10 o un monton.
La cuestion es que quiero hacer un where en otra tabla que por ejemplo seria ventas con el where de los idcliente, pero claro no quiero poner en la consulta uno a uno los clientes que me salgan en la otra consulta, se os ocurre una manera mejor.
Gracias por todos.
Carlos |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 16 Jun, 2009 4:59 am Asunto: |
|
|
Al parecer lo que requieres es un relación maestro detalle en tus tablas, ultimamente he estado usando Firebird, pero al parecer a los componentes xxxQuery, no les importa de donde vengan los datos, solo deben estar bien configurados.
1.- A la tabla donde tienes los clientes le llamare qClientes y a la tabla donde deseas ver las "ventas" de los clientes le llamare qVentas
2.- La tabla qClientes imágino que debe tener algo como esto "Select * From tuTablaClientes", esto hace que en esta tabla aparezcan todos los clientes.
3.- Bien en la tabla qVentas, debes realizar lo siguiente cambiando algunas de las propiedades
DataSource: es el DataSet de la tabla qClientes
SelectSQL: aqui debes generar una sentencia Select de la siguiente manera
"Select * From TuTablaVenta Where idCliente = :IdCli"
idCliente <- es el campo de tu Tabla TuTablaVentas
IdCli <- es el campo ID de la tabla qClientes
Bien lo que estamos haciendo es, que cada vez que te muevas en la tabla qClientes los registros de la tabla qVentas se cambian automaticamente generando una relación Maestro - Detalle. _________________
 |
|
| Volver arriba |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Mar 16 Jun, 2009 4:57 pm Asunto: |
|
|
Si lo que quieres no es exactamente una relacion Maestro-Detalle como la que te explica Cesar, y buscas una forma de sacar un recordset con todos los registros de varios vendedores, yo utilizaría:
| Código: | int nl = 0;
String cRs;
//Bucle donde sacas los clientes que necesitas (la sintasis no es exacta)
while (!RsCli->Eof) {
if (nl++ >0) cRs += ","; //si el codigo es numerico, si es texto necisitarás "','"
cRs += RsCli->Field .... ;
RsCli->Next();
}
// Una ves en cRs tienes todos los clientes, en el query de ventas consultas algo como:
= "Select .... From Ventas Where idcliente IN (" + cRs +")"; //Recuerda completar apostrofe si no es numerico.
|
Saludos |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 16 Jun, 2009 4:59 pm Asunto: |
|
|
Cesar,
No es eso exactamente lo que necesito, para que te hagas una idea tengo una tabla que se llama Ventas y otra que se llama Clientes, imaginemos que de la tabla clientes tengo 100 clientes pero solo saco 5 de ellos que cumplen ciertas condiciones y quiero presentar un listado de todas las ventas de esos 5 clientes pero no del resto.
Ahora mismo lo que hago es en el Where de las ventas poner idCliente="1" or idCliente="2" etc...
El problema es que tengo que ir uno a uno por los clientes y construir la cadena SQL, cuando imagino que debe de haber una forma más fácil de hacerlo no?
Espero haberme explicado bien.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 16 Jun, 2009 7:10 pm Asunto: |
|
|
Pues con la operación que estoy indicandote, no importa si sacas 1 o sacas 100, lo que interesa es que en la tabla ventas, siempre vas a tener las ventas dependiendo del cliente que elijas, en tu tabla Clientes.
Si en la construcción de tu tabla Clientes, solo hay 2, pues solo las ventas de esos 2 van aparecern en la otra tabla.
Saludos, analiza la sentencia y veras que da resultado. _________________
 |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 16 Jun, 2009 7:53 pm Asunto: |
|
|
Cesar,
Quizás no te entiendo bien, con lo que tu me estas diciendo saldrían solo las ventas del cliente seleccionado no? como un maestro/detalle normal, pero lo que yo quiero es que salgan todas las ventas de todos los clientes que tenga en la Query de clientes a la vez.
Es algo parecido a lo que dice Juanma, que es basicamente lo que yo estoy haciendo, pero pensaba que quizas dentro de la misma Query podria pedir los clientes que quiero con su condicion y de su resultado las ventas que tengan todos esos clientes.
No se si me explico bien.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 17 Jun, 2009 7:23 am Asunto: |
|
|
A ver algo así:
| Código: | SELECT A.Ventas, B.IdCliente, B.Nombre
FROM Ventas A, Clientes B
WHERE A.IdCliente = B.IdCliente AND B.IdCliente = ... |
Montas un query con las dos tablas, seleccionando los campos de las tablas que te interesen y en el WHERE pones las condiciones que te interesen para los clientes y AÑADES que la identificación del cliente esté en ambas tablas. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 17 Jun, 2009 4:43 pm Asunto: |
|
|
En el último de los casos, puedes hacer lo que te indica Ángel, y aunando un poco mas puedes convertir la Sentencia Select por un Create View para crear una vista. _________________
 |
|
| Volver arriba |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Sab 20 Jun, 2009 3:49 am Asunto: |
|
|
Hola carlos, es esto lo que buscas?
| Código: | SELECT * FROM ventas where ref_cliente IN(SELECT id_cliente FROM clientes WHERE nombre='juan'); |
saludos tor. _________________ Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr) |
|
| Volver arriba |
|
 |
|