PDA

Ver la Versión Completa : Ayuda con consulta que me tiene ...


rtorioa
06-11-2005, 20:45:28
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:

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 :

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

CREATE VIEW VENTRADA(LOTE,KGS)
AS
select lote, sum(kgs) from Tentrada
Group by lote;


y luego hice la siguiente consulta

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

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 :
Select Sum(kgs) from Tentrada
where lote = querylote.value

2.2 y Rdto es:
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
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
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 :

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í (http://www.marteens.com/caraoculta.htm) 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