Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Suma extraña, porque pasa ????...

Estas en el tema de Suma extraña, porque pasa ????... en el foro de SQL Server en Foros del Web. Saludos amigos, Bueno les comento, hace un par de meses habia posteado algo por el estilo, el problema es el siguiente, tengo este codigo: Código: ...
  #1 (permalink)  
Antiguo 20/02/2008, 17:44
Avatar de magosc  
Fecha de Ingreso: diciembre-2006
Mensajes: 72
Antigüedad: 18 años
Puntos: 0
Suma extraña, porque pasa ????...

Saludos amigos,
Bueno les comento, hace un par de meses habia posteado algo por el estilo, el problema es el siguiente, tengo este codigo:
Código:
SELECT     g_productos.des_prod AS Producto,  
ISNULL(SUM(a_produccion.cant_produccion), 0)
- ISNULL(SUM(a_sal_prod.cant_sal), 0) 
+ ISNULL(SUM(a_ccd_prod.cant_ccd), 0)
- ISNULL(SUM(a_ods_prod.cant_prod_od), 0)  AS Existencia
FROM g_productos LEFT OUTER JOIN
                 a_ods_prod ON g_productos.cod_prod = a_ods_prod.cod_prod 
LEFT OUTER JOIN
                 a_ccd_prod ON g_productos.cod_prod = a_ccd_prod.cod_prod 
LEFT OUTER JOIN
                 a_produccion ON g_productos.cod_prod = a_produccion.cod_prod 
LEFT OUTER JOIN
                 a_sal_prod ON g_productos.cod_prod = a_sal_prod.cod_prod
GROUP BY g_productos.des_prod, g_productos.cod_prod
HAVING      (g_productos.cod_prod = 5)
En donde la tabla g_productos es la se relaciona con todas las demas tablas, por medio de cod_prod de cada una de las otras tablas, cada una de las tablas tienen cierta cantidad de un producto en especifico, en este caso estoy accediendo al producto (cod_prod) = 5, y lo que quiero hacer es una suma de todo lo que se ha generado en a_produccion, mas lo que se ha generado en a_salidas, mas lo que se ha generado en a_ccd_prod, mas lo que se a generado en a_ods_prod y generar un total llamado Existencia.... creo q hasta aqui vamos bien...

El detalle es el siguiente, estaba funcionando esto bien, sin embargo ahora ya no hace la suma que debe de hacer, por ejemplo a
SUM(a_produccion.cant_produccion) tengo q dividirla entre un valor para que me de el valor original, es decir el valor REAL algo asi:
SUM(a_produccion.cant_produccion)/72 esto no es logico ... por lo menos para mi, pero digamos q todo estaria bien si TODOS los valores fueran divididos entre ese numero, pero no... cuando consulto otro numero (cod_prod) pues ese valor cambia y por lo tanto me afecta a la hora de consultar diferentes productos.

Espero a alguien le haya pasado algo asi y haya salido de ese problema, pues desde mi punto de vista la consulta esta bien hecha, aunq si hay otra forma de hacerla, les agradeceria mucho su ayuda.

De antemano muchas gracias...
  #2 (permalink)  
Antiguo 01/03/2008, 18:35
Avatar de magosc  
Fecha de Ingreso: diciembre-2006
Mensajes: 72
Antigüedad: 18 años
Puntos: 0
Re: Suma extraña, porque pasa ????...

hola amigos...
En vista q no he podido resolver mi problema... y creo q a mas de alguien le ha sonado raro este mi caso, esperare sugerencias, de como hacer lo siguiente:


tengo una tabla general:

TABLA G
id_g
cod_prod
des_prod
act

y otras tablas:

tabla 1
id_a
cod_prod
cant_a

tabla 2
id_b
cod_prod
cant_b

tabla 3
id_c
cod_prod
cant_c

tabla 3
id_d
cod_prod
cant_d


necesito hacer esto, necesito sumar todo el campo cant_a, cant_b, cant_c y cant_d, y hacer una operacion entre esas sumas... algo asi sum(cant_a)+sum(cant_b)-sum(cant_c)-sum(cant_d) los cuales tengan el cod_prod que le indique la tabla G y tambien q muestre el des_prod de la tabla G, con el act = 1, de la tabla G...
Creo q el problema esta en como las relaciono... pero no encuentro otra manera mas como la postee inicialmente....


Espero explicarme y gracias de nuevo por su apoyo y ayuda...
hasta luego...
  #3 (permalink)  
Antiguo 01/03/2008, 23:41
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 23 años
Puntos: 7
Re: Suma extraña, porque pasa ????...

Intenta con algo como esto:
Código:
SELECT        p.des_prod AS Producto,  
            ISNULL(ap.cant_produccion, 0) -
            ISNULL(sal.cant_sal, 0) +
            ISNULL(ccd.cant_ccd, 0) -
            ISNULL(ods.cant_prod_od, 0)  AS Existencia
FROM        g_productos AS p
LEFT JOIN    (
                SELECT    cod_prod, SUM(cant_prod_od) AS cant_prod_od
                FROM    a_ods_prod
                GROUP BY cod_prod
            ) AS ods
            ON ods.cod_prod = p.cod_prod
LEFT JOIN    (
                SELECT    cod_prod, SUM(cant_ccd) AS cant_ccd
                FROM    a_ccd_prod 
                GROUP BY cod_prod
            ) AS ccd
            ON ccd.cod_prod = p.cod_prod 
LEFT JOIN    (
                SELECT    cod_prod, SUM(cant_produccion) AS cant_produccion
                FROM    a_produccion
                GROUP BY cod_prod
            ) AS ap
            ON ap.cod_prod = p.cod_prod 
LEFT JOIN    (
                SELECT    cod_prod, SUM(cant_sal) AS cant_sal
                FROM    a_sal_prod 
                GROUP BY cod_prod
            ) AS sal
            ON sal.cod_prod = p.cod_prod
WHERE        p.cod_prod = 5
GROUP BY    p.des_prod, p.cod_prod
Basicamente obtienes los totales por producto para cada tabla antes de hacer la operación que te interesa. Pero la forma en que tienes la consulta me parece correcta. La única explicación que se me ocurre para el comportamiento que tiene es que en la tabla tengas registros duplicados en alguna de ellas.
  #4 (permalink)  
Antiguo 02/03/2008, 10:08
Avatar de magosc  
Fecha de Ingreso: diciembre-2006
Mensajes: 72
Antigüedad: 18 años
Puntos: 0
Re: Suma extraña, porque pasa ????...

Hey gracias por su ayuda....
aqui les pongo el codigo q si me funciono, gracias a mi amigo FanLavigne por su gran ayuda...

Solo es para la tabla general y otras dos tablas, pero creo q se entiende para las demas tablas....

Código:
 
SELECT     Id, Nombre, SUM(Qty) AS Expr1 
FROM (SELECT g_productos.cod_prod AS Id, g_productos.des_prod AS Nombre,
a_produccion.cant_produccion AS Qty 
FROM g_productos INNER JOIN a_produccion ON 
g_productos.cod_prod = a_produccion.cod_prod 
                      UNION ALL
SELECT g_productos_1.cod_prod AS Id, g_productos_1.des_prod AS Nombre, 
- a_sal_prod.cant_sal AS QTY 
FROM g_productos AS g_productos_1 INNER JOIN 
a_sal_prod ON g_productos_1.cod_prod = a_sal_prod.cod_prod)  AS derivedtbl_1 
GROUP BY Id, Nombre 
ORDER BY Id
Gracias por el interes de todos...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:50.