Bases de Datos => SQL Server => Mensaje iniciado por: Oscarhdz84 en Miércoles 8 de Agosto de 2007, 02:54
Título: Perdida De Datos Union 3 Tablas
Publicado por: Oscarhdz84 en Miércoles 8 de Agosto de 2007, 02:54
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 :)
Título: Re: Perdida De Datos Union 3 Tablas
Publicado por: ElNapster en Miércoles 8 de Agosto de 2007, 16:48
;)
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
Select a.descripcion
, b.precio
From tablaA a
, tablaB b
Where a.codigo *= b.codigo
GROUP BY a.descripcion
, b.precio
Con (*=) le estoy diciendo que no me importa si existe en la tabla b pero yo quiero todos de la tabla a
Suerte....
Título: Re: Perdida De Datos Union 3 Tablas
Publicado por: Oscarhdz84 en Miércoles 8 de Agosto de 2007, 18:47
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
Tabla1 Tabla 2 Query
Cod cant Cod cant Cod cant
1 10 2 20 1 10
3 10 4 10 2 20
3 10
4 10
Título: Re: Perdida De Datos Union 3 Tablas
Publicado por: ElNapster en Miércoles 8 de Agosto de 2007, 19:25
Lo que tienes que hacer son subconsultas .... al hacer tu comparacion normal por decirte un ejemplo
Código: Text
Select a.cod, a.sum(cant)
from tabla1 a, tabla2 b
where a.cod = b.cod
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
Select a.cod, a.sum(cant)
from tabla1 a, tabla2 b
where (If Not Exist (Select 1 from tabla1 a tabla2 b where a.cod=b.cod)
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