• Lunes 23 de Diciembre de 2024, 08:54

Autor Tema:  Perdida De Datos Union 3 Tablas  (Leído 2102 veces)

Oscarhdz84

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Perdida De Datos Union 3 Tablas
« en: Miércoles 8 de Agosto de 2007, 02:54 »
0
Que tal, estoy trabajando con una Base de Datos de inventario y me quede atorado en un query y me gustaria saber si alguien me puede dar un empujoncito.
Manejo 3 tablas de productos: Entradas, existencia y salidas.
Lo que inento hacer es unir la informacion de las 3 tablas (IdProd, cantidad).
Suponiendo que tengo los mismos productos en las trs tablashago lo sig:

SELECT A.IdProd, SUM(A.cantidad + B.Cantidad - C.Cantidad) FROM Entradas A INNER JOIN Existencia B ON A.IdProd = B.IdProd INNER JOIN salidas C ON A.IdProd = C.IdProd GROUP BY A.IdProd

esto me da un buen resultado, peeero, mi problema esta en que no siempre tengo los mismo productos en las 3 tablas, algunas veces tengo entradas de productos que no tengo en existencia, o tengo salidas de productos que no tengo en entradas, asi que perderia esa informacion ya que no la uniria.

Alguien tiene alguna idea de como puedo "Unir simplemente" las 2 primeras tablas
para agruparlas, no perder informacion que no tenga en alguna de las 2 y despues restarle la informacion que tengo en la de salidas??
Nota: Nunca podre tener salidas de productos que no tengo en existencia.

Llevo bastante tiempo tratando de elaborar ese query y no he podido, agradeceria mucho su apoyo, gracias :)

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Perdida De Datos Union 3 Tablas
« Respuesta #1 en: Miércoles 8 de Agosto de 2007, 16:48 »
0
;)

Bueno haz lo siguiente , como vos sabras el SQL Sever te da la opcion a decir que si queres ver tooooooooooodos los registros que cumplan la condicion que vos querras pero tambien le podes decir en este caso que te muestre todos los registros aunque no le importen si existen en el otro lado, verdad... asi que te doy un ejemplito para que vos lo implementes segun sea tu necesidad....

Código: Text
  1. Select  a.descripcion
  2.          , b.precio
  3.   From  tablaA a
  4.          , tablaB b
  5. Where a.codigo *= b.codigo
  6. GROUP BY a.descripcion
  7.              , b.precio
  8.  
Con (*=) le estoy diciendo que no me importa si existe en la tabla b pero yo quiero todos de la tabla a

Suerte....
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



Oscarhdz84

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Perdida De Datos Union 3 Tablas
« Respuesta #2 en: Miércoles 8 de Agosto de 2007, 18:47 »
0
Muchas gracias ElNapster, esa no la sabia, que diferencia tiene con left outer join??
En fin lo hice como me aconsejaste, me pidio que modificara los niveles de compativilidad de la base dedatos a 80 o menos con el procedure sp_dbcmptlevel, (en realidad no se que fue lo que hice pero lo ejecute, jeje) y realice el query, me funciono mas no soluciona mi problema, :s lo que necesito es que una las 2 tablas, y  con el *= me pone todos los datos unicamente de una sola tabla y si le pongo A.Prod * B.Prod AND B.Prod *= A.Prod no se puede, ahi sigo teniendo perdida la informacion de alguna de las tablas, es decir, lo que busco seria:

Código: Text
  1.  
  2.  
  3. Tabla1          Tabla 2          Query
  4. Cod  cant      Cod  cant       Cod  cant
  5. 1     10        2     20         1    10
  6. 3     10        4     10         2    20
  7.                                   3   10
  8.                                   4   10
  9.  
  10.  

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Perdida De Datos Union 3 Tablas
« Respuesta #3 en: Miércoles 8 de Agosto de 2007, 19:25 »
0
Lo que tienes que hacer son subconsultas .... al hacer tu comparacion normal por decirte un ejemplo

Código: Text
  1. Select a.cod, a.sum(cant)
  2.   from tabla1 a, tabla2 b
  3. where a.cod = b.cod
  4.  
aca se veran reflejado solo los que cumplen y estan el las 2 tablas.. pero con subconsultas seria asi....

Tienes que hacer un nivel de comparacion al similar  a esta...

Código: Text
  1. Select a.cod, a.sum(cant)
  2.   from tabla1 a, tabla2 b
  3. where (If Not Exist (Select 1 from tabla1 a tabla2 b where a.cod=b.cod)
  4.  

Ahora le estan haciendo mantenimiento a mi maquina y no tengo instalado el SQL Server en esta maquina , pero mas o menos es asi ...... utiliza subconsultas y If Exist o If Not Exist

Suete  :comp:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa