Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consultar SUM() de dos tablas distintas (https://www.clubdelphi.com/foros/showthread.php?t=90927)

gustavosv 09-10-2016 23:46:28

Consultar SUM() de dos tablas distintas
 
Hola, tengo que consultar un producto y cuánto de dos materias primas ha gastado, tengo el siguiente SQL pero la respuesta de los SUM() no es lo que espero:
Código SQL [-]
SELECT P.CodPdto, P.Descripcion, SUM(T.VrTotal) AS TotalTelas, SUM(I.VrTotal) AS TotalInsumos
FROM productos P
INNER JOIN telas T ON T.CodPdto = P.CodPdto
INNER JOIN insumos I ON I.CodPdto = P.CodPdto
WHERE P.CodPdto = :CodPdto
En la tabla de Telas hay 5 registros y en la de Insumos hay 7 registros para ese Producto, entonces el valor de SUM() para Telas es 7 veces el que debe ser, y en Insumos es 5 veces lo que debe ser.

Agradezco los comentarios al respecto.

GustavoSV

Neftali [Germán.Estévez] 10-10-2016 09:42:33

Una muestra de los datos ayudaría a entender el problema.

gustavosv 19-10-2016 02:54:10

hola, no había escrito pues andaba con la fecha de entrega de un proyecto en la espalda ... uff! pero bueno, en cuanto al ejemplo es algo así como si el producto fuera una camisa que tiene su estructura de consumo de materias primas almacenadas en diferentes tablas dependiendo de la materia prima, es decir consumo de telas, consumo de insumos (hilos, botones), cada uno en su respectiva tabla, y se necesita saber cuánto valen las telas e insumos que se consumen en una camisa.

Lo resolví de la siguiente manera ...
Código SQL [-]
SELECT productos.CodProducto, productos.Descripcion, ValorTelas, ValorInsumos
FROM productos
INNER JOIN 
    (SELECT SUM(telas.VrTotal_1) AS ValorTelas FROM telas 
     WHERE telas.CodProducto = :Producto
     GROUP BY telas.CodProducto) AS ConsumoTelas
INNER JOIN 
    (SELECT SUM(insumos.VrTotal_1) AS ValorInsumos FROM insumos 
     WHERE insumos.CodProducto = :Producto
     GROUP BY insumos.CodProducto) AS ConsumoInsumos
WHERE productos.CodProducto = :Producto

pero no sé si sea lo más eficiente o lógico, así es que cualquier comentario es bienvenido.

gustavosv 20-10-2016 22:35:21

el problema que tiene la solución que tengo es que solo puede procesar registro por registro :(

el ejemplo sería algo así:
PRODUCTOS
Codigo Descripcion
CAMISA Camisa manga corta
BLUSA Blusa unicolor bordada
FALDA Falda rotonda

TELAS
CodigoPdto CodigoTela Vr. Consumo
CAMISA T101 200
CAMISA T102 50
CAMISA T103 80
BLUSA T102 390
BLUSA T104 75
FALDA T101 85
FALDA T102 90
FALDA T103 30
FALDA T104 45

INSUMOS
CodigoPdto CodigoInsumo Vr. Consumo
CAMISA BOTON 20
CAMISA HILO 120
BLUSA HILO 150
FALDA BOTON 12
FALDA HILO 100

CONSUMOS POR PRENDA TELAS INSUMOS
CAMISA Camisa manga corta 330 140
BLUSA Blusa unicolor bordada 465 150
FALDA Falda rotonda 250 112


La franja horaria es GMT +2. Ahora son las 14:21:49.

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