Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-07-2007
Vichomo Vichomo is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
Vichomo Va por buen camino
Talking Query con 3 tablas

Buenas Noches Amigos del Club...

Tengo un serio problema, estoy haciendo un sistemita que es para llevar remisiones (facturas), productos, clientes, etc, el problema esta en que estoy haciendo una pantalla donde tengo un dbgrid, ese dbgrid tiene que mostrarme ciertos campos.
les explicare brevemente el proceso, cuando remisiono un producto o mas
guardo la clave de cliente q remisiona, guardo la clave de producto, y la cantidad de producto, esto se guarda en detalle remision, ahora lo que quiero hacer es jalar en la pantalla, el nombre de cliente, su saldo, y la cantidad acumulada que ha sumado el cliente de todas sus remisiones, solo me tiene que mostrar la cantidad de ciertos productos (especificamente del 1 y 2)
Les dire que tablas son con las que interactuo en esa pantalla. solo pondre los campos que necesitamos.

Son 3
1. tabla --> Clientes (cvecli, razso(es el nombre), saldo)
2. tabla ---> Remisiones (cverem, cvecli)
3. tabla ---> Detalle_remision(cverem, cvepro(clave del producto), cantidad)

Eh tratado de hacer querys pero no me sale, no eh podido, ya llevo un par de dias trabado en esto. lo estoy haciendo el delphi 6, ocupo un dbgrid que se conecta con su datasource y este a su dataset.

Este query eh hecho, bueno de mucho y no me corre, me dice invalid column reference, solo si le quito los campos de de c.cvecli, c.razso, c.saldo, me corre pero solo me da la suma de la cantidad por cada remision.

select cverem, sum(canti), c.cvecli, c.razso, c.saldo from remisiones r, detalle_remision d, clientes c where r.cverem = d.cverem and r.cvecli= c.cvecli group by cverem

De antemano les agradezco su tiempo y sus comentarios.
Responder Con Cita
  #2  
Antiguo 29-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bienvenido al club.
Tal vez asi:
Código SQL [-]
SELECT Clientes.cvecli, Clientes.razso, Clientes.saldo, Remisiones.cverem, 
Remisiones.cvecli, Detalle_remision.cverem, Detalle_remision.cvepro, 
SUM(Detalle_remision.cantidad) as (Cantidad) FROM Clientes, Remisiones,
Detalle_remision, WHERE Remisiones.cverem = Detalle_remision.cverem and 
Clientes.cvecli = Remisiones.cvecli GROUP BY cvecli
Saludos
Responder Con Cita
  #3  
Antiguo 29-07-2007
Vichomo Vichomo is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
Vichomo Va por buen camino
No funciono..

Hola Caral, gracias por tu tiempo y tu respuesta pero tenemos malas noticias, no funciona, me sigue saliendo el mismo error cuando ejecuto el query en Ibexpert Invalid Column reference.

Pero de todas maneras te agradezco..

Buen Dia...
Responder Con Cita
  #4  
Antiguo 29-07-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

Bien a bien no sé en qué radica el problema, pero en tu consulta original

Código SQL [-]
select cverem, sum(canti), c.cvecli, c.razso, c.saldo
from remisiones r, detalle_remision d, clientes c
where r.cverem = d.cverem and r.cvecli= c.cvecli
group by cverem

la referencia al campo cvrem en group by es ambigua; puede ser la llave de la tabla remisiones o la llave foranea en la tabla detalle_remision.

Quizá por ahí vaya el problema.

// Saludos
Responder Con Cita
  #5  
Antiguo 29-07-2007
Vichomo Vichomo is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
Vichomo Va por buen camino
Query

Si es ambigua por lo que vi, pero entonces como podria agruparlos, para que mi resultado fuera el requerido, porque si es por cvecli, tambien es ambigua.

Gracias
Responder Con Cita
  #6  
Antiguo 29-07-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Has probado con d.cvrem? Y, por cierto, en el select pasa lo mismo.

// Saludos
Responder Con Cita
  #7  
Antiguo 29-07-2007
Vichomo Vichomo is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
Vichomo Va por buen camino
Cita:
Empezado por roman
¿Has probado con d.cvrem? Y, por cierto, en el select pasa lo mismo.

// Saludos
Si ya lo pobre asi, a los dos les puse r.cverem o d.cverem y me dice lo mismo, invalid column reference. no sera por la suma?
Responder Con Cita
  #8  
Antiguo 29-07-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pudiera ser. Tienes sum(canti), pero en la descripción que das de tus tablas, el campo se llama cantidad.

// Saludos
Responder Con Cita
  #9  
Antiguo 29-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Para seguir con esto, me parece:
Código SQL [-]
SELECT DISTINCTROW Clientes.cvecli, Clientes.razso, Clientes.saldo,
Remisiones.cverem, Remisiones.cvecli, Detalle_remision.cverem,
Detalle_remision.cvepro, SUM(Detalle_remision.cantidad) AS [Cantidad]
FROM (Clientes INNER JOIN Remisiones ON Clientes.cvecli = Remisiones.cvecli) 
INNER JOIN Detalle_remision ON Remisiones.cverem = Detalle_remision.cverem
GROUP BY Clientes.cvecli, Clientes.razso, Clientes.saldo, Remisiones.cverem, 
Remisiones.cvecli, Detalle_remision.cverem, Detalle_remision.cvepro
Ya que hay una suma de por medio tiene que haber un distinc de lo contrario no daria el total de la suma, el group by, tiene que acoplar el orden de la solicitud, ya que hay campos con nombres iguales.
Saludos
Responder Con Cita
  #10  
Antiguo 29-07-2007
Vichomo Vichomo is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
Vichomo Va por buen camino
Cita:
Empezado por roman
Pudiera ser. Tienes sum(canti), pero en la descripción que das de tus tablas, el campo se llama cantidad.

// Saludos
Error: es canti no cantidad. pero el query sigue saliendo error
Responder Con Cita
  #11  
Antiguo 29-07-2007
Vichomo Vichomo is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
Vichomo Va por buen camino
Cita:
Empezado por Caral
Hola
Para seguir con esto, me parece:

Código SQL [-]
SELECT DISTINCTROW Clientes.cvecli, Clientes.razso, Clientes.saldo,
Remisiones.cverem, Remisiones.cvecli, Detalle_remision.cverem,
Detalle_remision.cvepro, SUM(Detalle_remision.cantidad) AS [Cantidad]
FROM (Clientes INNER JOIN Remisiones ON Clientes.cvecli = Remisiones.cvecli)
INNER JOIN Detalle_remision ON Remisiones.cverem = Detalle_remision.cverem
GROUP BY Clientes.cvecli, Clientes.razso, Clientes.saldo, Remisiones.cverem,
Remisiones.cvecli, Detalle_remision.cverem, Detalle_remision.cvepro




Ya que hay una suma de por medio tiene que haber un distinc de lo contrario no daria el total de la suma, el group by, tiene que acoplar el orden de la solicitud, ya que hay campos con nombres iguales.
Saludos
Hola nuevamente Caral, tu Query me funciono pero falto, lo que pasa que utilizo SQL en el manejador IBExpert, me funciono al quitarle DISTINCTROW, porque no acepta esa palabra reservada, pero el resultado me lo duplicado sin hacer la suma por cliente, osea me salen todos sus productos con su respectiva cantidad pero sin sumarla, para eso era el DISTINCTROW, yo lo trate de hacer, pero luego leyendo me di cuenta que no sirve para SQL, solo sirve DISTINC, entonces que me podrias proponer para que no me duplicara y me sumara?

Gracias otra vez.
Responder Con Cita
  #12  
Antiguo 29-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Usa DISTINC, es casi lo mismo, con esto lo que hace es buscar los que coincidan sin duplicarlos, pruebalo.
El problema de la suma si persiste tal vez se solucione con un having.
Saludos
Responder Con Cita
  #13  
Antiguo 29-07-2007
Vichomo Vichomo is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
Vichomo Va por buen camino
Cita:
Empezado por Caral
Hola
Usa DISTINC, es casi lo mismo, con esto lo que hace es buscar los que coincidan sin duplicarlos, pruebalo.
El problema de la suma si persiste tal vez se solucione con un having.
Saludos
Ya lo puse asi y el resultado es asi:
Este cliente tiene 2 remisiones y en cada remision tiene 2 productos, el resultado que yo necesito seria una fila, con su nombre y la suma de la cantidad de todos sus productos, eso ya lo sabes, el resultado del query al ponerle distinct me arroja 4 veces su nombre, y cada nombre con su respectiva cantidad del producto, osea no me los esta sumando, espero me haya dado a entender.
Gracias
Responder Con Cita
  #14  
Antiguo 29-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No se en sql, pero intenta last.
Saludos
Responder Con Cita
  #15  
Antiguo 30-07-2007
Avatar de TheFlame
TheFlame TheFlame is offline
Miembro
 
Registrado: jul 2007
Posts: 12
Poder: 0
TheFlame Va por buen camino
Wink

Hola.
Soy nuevo en el foro y al ver tu problema no pude evitar ayudarte con la consulta SQL.
Por lo que pude entender del problema es que necesitas la suma total de la cantidad de productos que compro el cliente, para ello la consulta SQL seria como sigue:
Código SQL [-]
Select Clientes.cvecli, Clientes.razso, Sum(Detalle_remision.cantidad) as CantidadTotal, Clientes.Saldo
From Clientes Inner Join Remisiones On Clientes.cvecli=Remisiones.cvecli
Inner join Detalle_remision on Remisiones.cverem=Detalle_remision.cveremv
Group By Clientes.cvecli, Clientes.razso, Clientes.Saldo

Espero que mi aporte haya servido de ayuda, Saludos.
Responder Con Cita
  #16  
Antiguo 31-07-2007
Vichomo Vichomo is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
Vichomo Va por buen camino
Solucionado

Cita:
Empezado por TheFlame
Hola.
Soy nuevo en el foro y al ver tu problema no pude evitar ayudarte con la consulta SQL.
Por lo que pude entender del problema es que necesitas la suma total de la cantidad de productos que compro el cliente, para ello la consulta SQL seria como sigue:
Código SQL [-]Select Clientes.cvecli, Clientes.razso, Sum(Detalle_remision.cantidad) as CantidadTotal, Clientes.Saldo From Clientes Inner Join Remisiones On Clientes.cvecli=Remisiones.cvecli Inner join Detalle_remision on Remisiones.cverem=Detalle_remision.cveremv Group By Clientes.cvecli, Clientes.razso, Clientes.Saldo


Espero que mi aporte haya servido de ayuda, Saludos.
Gracias TheFlame ... Tu query me ha servido de maravilla, ya quedo solucionado. muchas gracias a todos tambien por su tiempo y su ayuda! Nos vemos en el proximo Query
Responder Con Cita
  #17  
Antiguo 31-07-2007
Vichomo Vichomo is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
Vichomo Va por buen camino
Exclamation otro mas...


Oye amigo the flame necesito tu ayuda, es para el mismo query, yo quiero q solo sume la cantidad de los productos 1 y 2, la tabla se llama productos y su clave es cvepro y se relaciona con detalle_remision q tambien tiene el mismo nombre de campo q es cvepro, espero puedas ayudarme.

y para el q pueda ayudarme son bien recibidos sus comentarios. gracias.
Responder Con Cita
  #18  
Antiguo 31-07-2007
Vichomo Vichomo is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
Vichomo Va por buen camino
JOJOJO, ya pudee.. gracias de todas maneras, aqui esta el query que me funciono, solo le agrege 2 filitas mas.

Select Clientes.cvecli, Clientes.razso, Sum(Detalle_remision.canti) as Emulsion, Clientes.Saldo
From Clientes Inner Join Remisiones On Clientes.cvecli=Remisiones.cvecli
Inner join Detalle_remision on Remisiones.cverem=Detalle_remision.cverem
inner join productos on detalle_remision.cvepro=productos.cvepro
where detalle_remision.cvepro=1 or detalle_remision.cvepro=2
Group By Clientes.cvecli, Clientes.razso, Clientes.Saldo
Responder Con Cita
  #19  
Antiguo 31-07-2007
Vichomo Vichomo is offline
Miembro
 
Registrado: jul 2007
Posts: 21
Poder: 0
Vichomo Va por buen camino
Exclamation Aun mas del mismo query

Hola, oigan saben como hacer que me traiga todos los clientes, osea quiero todos los registros aunque el valor sea nulo, en especifico del mismo query que puse arriba que ustedes me ayudaron a hacerlo, el resultado es la suma de tods los clientes que han remisionado, pero solo me aparecen los que han comprado del producto 1 y 2, pero quiero que me aparezcan todos los clientes que hay en la tabla, aunque la suma sea Null, eh probado el LEFT JOIN, quite el INNER JOIN y lo probe pero no me resulto, me servirian muchos sus comentarios, muchas gracias!!
Responder Con Cita
  #20  
Antiguo 31-07-2007
Avatar de TheFlame
TheFlame TheFlame is offline
Miembro
 
Registrado: jul 2007
Posts: 12
Poder: 0
TheFlame Va por buen camino
Talking Podria ser asi.

Cita:
Empezado por Vichomo

Código SQL [-]Select Clientes.cvecli, Clientes.razso, Sum(Detalle_remision.canti) as Emulsion, Clientes.Saldo
From Clientes Inner Join Remisiones On Clientes.cvecli=Remisiones.cvecli
Inner join Detalle_remision on Remisiones.cverem=Detalle_remision.cverem
inner join productos on detalle_remision.cvepro=productos.cvepro
where detalle_remision.cvepro=1 or detalle_remision.cvepro=2
Group By Clientes.cvecli, Clientes.razso, Clientes.Saldo


Hola, me alegra que mi aporte te sirviera.
Para que obtengas todos los registros de tu tabla Clientes tendrías que hacer los Joins con Right o Left, a mí parecer debería funcionar con Right, la consulta llegaría a ser de la siguiente forma:


Código SQL [-]Select Clientes.cvecli, Clientes.razso, Sum(Detalle_remision.canti) as Emulsion, Clientes.Saldo

Código SQL [-]
From Clientes Right Join Remisiones On Clientes.cvecli=Remisiones.cvecli
Inner join Detalle_remision on Remisiones.cverem=Detalle_remision.cverem
inner join productos on detalle_remision.cvepro=productos.cvepro
where detalle_remision.cvepro=1 or detalle_remision.cvepro=2
Group By Clientes.cvecli, Clientes.razso, Clientes.Saldo




Nota: Solo el cambio fue en el primer Join, porque queremos mostrar todos los resultados de la tabla Clientes si es que no funciona con Right cámbialo por Left

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Imprimir resultado de 2 tablas con un Query maravert Impresión 2 06-12-2006 17:57:59
Query entre dos tablas de distintas databases tefots Firebird e Interbase 2 06-11-2006 15:28:29
nombre de las tablas en un query ercrizeporta Conexión con bases de datos 2 28-09-2006 17:30:46
Query a Tablas Paradox pelaorb68 Conexión con bases de datos 0 13-01-2006 23:25:25
Query con tablas temporales cartmanrules Firebird e Interbase 4 27-05-2004 10:23:47


La franja horaria es GMT +2. Ahora son las 09:40:42.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi