Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda con consulta que me tiene ... (https://www.clubdelphi.com/foros/showthread.php?t=26880)

rtorioa 06-11-2005 20:45:28

Ayuda con consulta que me tiene ...
 
Hola, tengo 2 tablas, Entradas y transformaciones para una planta de despiece de pavo, las tablas tienen la siguiente información:
Entradas Transformaciones
lote kgs_entrada lote articulo kgs
-------------------- ------------------------------
A 120 A X 25
A 200 A X 20
B 36 A Y 200

Quiero hacer una consulta que me de lo siguiente:
consulta
lote entrada articulo kgs rendimiento(kgs/entrada)
-------------------------------------------------------------------
A 320 X 45 0,14
A 320 Y 200 0.62

Es decir, que me de el rendimiento de cada articulo por lote
No se si me he explicado bien, pero con sum y group by no soy capaz de sacarlo, si me pudieran ayudar...
Un saludo y gracias de ante mano.:confused:

rtorioa 06-11-2005 20:52:53

perdon, pero creo que no han quedado las tablas claras arriba
Entradas
lote kgs
======
A 120
A 200
B 142.5

Transformaciones
lote articulo kgs
============
A X 25
A X 20
A Y 200

Perdonen si no he hecho bien mi pregunta

marcoszorrilla 06-11-2005 21:56:46

Pues no acabo de captar claramente que es lo que quieres, porque no pones
Tabla1
campo1
campo2
...
Tabla2
campo1
campo2
...

Y luego el resultado que se obtendría con esos datos, para así hacernos una idea de lo que quieres.

Un Saludo.

rtorioa 07-11-2005 01:35:36

Son 2 tablas, Tentradas y Ttransformaciones
Tentradas
- lote
- kgs
- ....

Ttransformaciones
- lote
- articulo
- kgs
- ...

El funcionamiento es el siguiente:
A la tabla entradas le llegan datos que son en realidad compras de canales completas. a esas entradas las identifica un lote, y puede haber mas de una entrada con el mismo lote.
A la tabla transformaciones le llegan datos que son las distintas pesadas que se hacen después de haber despiezado las canales (p.e alas de pavo, filete de pavo...) y que se las da el mismo lote de las canales de las que proceden.

La idea es poder ver el rendimiento de las canales que se compran, es decir,
de 600 kgs que se compraron del lote A salieron 200 kgs de filetes, 150 de alas y 250 de muslos.

En definitiva la consulta resultante sería algo así:

lote..............entrada........articulo........kgs........rdto(kgs/entrada)
-----------------------------------------------------------------
A...................600.............filete..........200..............0,33
A...................600.............alas...........150..............0,25
A...................600.............muslos........250..............0,42


Quizas ahora se entienda mejor, perdón por haberme explicado tan mal
y muchas gracias

marcoszorrilla 07-11-2005 07:12:43

Mira a ver si con esta idea lo logras:
Código SQL [-]
  Select E.lote, Sum(E.entrada),T.articulo,Sum(T.kgs),Sum( T.kgs / E.Entrada)  as Rdto 
  From Tenentradas as E,Ttransformaciones as T
  Where E.lote = t.Lote
  Group By E.Lote, T.Articulo

Un Saludo.

rtorioa 07-11-2005 11:34:31

Te ha pasado exactamente lo mismo que a mi, esa consulta no va bien
por cada ocurrencia en la tabla transformaciones de un articulo multiplica el sum(entradas),

es decir, me multiplica los sum por cada ocurrencia en las tablas, no lo entiendo ......:confused:

Ivanzinho 07-11-2005 12:28:56

Prueba con esto :

Código SQL [-]
Select E.lote, Sum(E.kgs), T.articulo,Sum(T.kgs), Sum(T.kgs)/Sum(E.kgs) as Rdto
from Tentradas as E, Ttransformaciones as T
Where E.lote = T.lote
Group By E.lote, T.articulo

rtorioa 07-11-2005 13:23:43

igual, me sale lo mismo,
¿ que es lo que está mal?
Esto me esta fastidiando ...

Ivanzinho 07-11-2005 16:11:01

Mira lo probe y si que da el resultado que comentas, yo lo solucione de la sigunete manera

Cree la vista VEntrada donde agrupo todas las entradas del mismo lote en el mismo registro

Código SQL [-]
CREATE VIEW VENTRADA(LOTE,KGS)
AS
select lote, sum(kgs) from Tentrada
Group by lote;

y luego hice la siguiente consulta

Código SQL [-]
Select E.lote, E.kgs, T.articulo,Sum(T.kgs), Sum(T.kgs)/E.kgs as Rdto
from Ventrada E, Ttransformaciones T
Where E.lote = T.lote
Group By E.lote, T.articulo, E.kgs

Así sí funciona, lo probé

Un saludo y espero que te valga esta forma.

rtorioa 08-11-2005 09:52:03

Utilizo access y no me deja crear vistas, no se si podré hacer algo parecido.

Ivanzinho 08-11-2005 10:22:43

prueba a hacer lo siguiente a ver si te funciona:

1.-crea la siguiente query

Código Delphi [-]
consulta := '';
consulta := consulta + 'Select lote, articulo,Sum(kgs) kgs ' ;
consulta := consulta + 'from Ttransformaciones ';
consutla := consulta + 'Group By lote, articulo';
 
query.Close;
query.SQL.Clear;
query.SQL.Add(consulta);
query.Open;

2.- Crea dos campos calculados KgsEnt y RdTo donde:
2.1 kgsEnt es :
Código SQL [-]
Select Sum(kgs) from Tentrada
where lote = querylote.value
2.2 y Rdto es:
Código Delphi [-]
Rdto := querykgs.value / querykgsEnt.value;

No lo probe pero debería funcionar, aunque igual hay algún error tonto por el medio pero no creo que te de problema alguno.

Pruébalo y ya me comentarás.

Suerte

rtorioa 08-11-2005 10:50:10

Joer, ahora si q me has liao, no te he entendido muy bien, ¿donde te creas los campos calculados?

Menuda consultita ...

Ivanzinho 08-11-2005 11:06:26

Cita:

Empezado por rtorioa
Joer, ahora si q me has liao, no te he entendido muy bien, ¿donde te creas los campos calculados?

Menuda consultita ...

Que lenguaje de programación estás usando, di por supuesto que usabas delphi, pero igual supuse de más :p

rtorioa 08-11-2005 13:03:39

si, uso delphi, pero bueno, como la consulta todavía no la tengo clara la estoy probando en access directamente, luego ya generarla en delphi y mandarla no tengo problema, pero claro, mientras la consulta no funcione....

Creo que me expliqué, gracias y un saludo.

Ivanzinho 08-11-2005 13:37:07

Cita:

Empezado por rtorioa
si, uso delphi, pero bueno, como la consulta todavía no la tengo clara la estoy probando en access directamente, luego ya generarla en delphi y mandarla no tengo problema, pero claro, mientras la consulta no funcione....

Creo que me expliqué, gracias y un saludo.

Ok, yo con el access no te puedo ayudar mucho, ya que lo único que tengo echo con el son pequeñas BD´s caseras, pero si haces como te comente aqui no creo que tengas ningun problema.

Lo que tienes que hacer es agregar un componente Query a tu formulario, en la propiedad SQL pones :

Código SQL [-]
Select lote, articulo,Sum(kgs) kgs;
from Ttransformaciones
Group By lote, articulo

luego haces dobleclick sobre el componente pinchas con el botón derecho y añades todos los campos, luego creas los campos que te comente anteriormente (KgsEnt y Rdto) pinchando con el botón derecho pero ahora eliges new field (Crea los dos).

En el evento OnCalcField del query calculas el valor de estos dos campos como te comente aqui, para el campo KgsEnt tendras que usar otra query y agregarle la consulta que te indico.

Finalmete solo te quedara asignarle un DataSource y este relacionarlo con una grid.

Si tienes alguna duda sobre la utilización de los querys te recomiendo que te descargues La cara oculta de delphi 4 de aquí el libro tiene cosas que ya se quedaron algo anticuadas (ya tiene sus años) pero para lo que se comentó en este hilo te vale perfectamente.

Espero que lo soluciones lo antes posible (mantenme informado ;) )

rtorioa 08-11-2005 13:58:48

si señor, eres un genio, ya lo solucioné.

Me cré esa tabla en access con un select .... into y hice la consulta que tu me pasaste y.... ¡FUNCIONA!
Muchisimas gracias, te debo una


La franja horaria es GMT +2. Ahora son las 13:05:38.

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