SQL Server - UNION DE DOS CONSULTAS

   
Vista:

UNION DE DOS CONSULTAS

Publicado por lender (10 intervenciones) el 05/05/2014 19:08:40
Buenas tardes a todos,

tengo un problema con una consulta, lo que pasa es que me pidieron averiguar todos los items vendidos en un periodo de tiempo ya logre hacerlos con la siguiente consulta:

1
2
3
4
5
6
7
8
9
SELECT V.ItemCode AS CODIGO_ITEM, V.Dscription, SUM(V.Quantity)AS TOTAL_VENDIDOS, S.whsname AS BODEGA,W.OnHand AS EN_STOCK
FROM INV1 V
INNER JOIN OITW W ON V.ItemCode=W.ItemCode
inner join OITM M ON V.ItemCode=M.ItemCode
inner join OITB B ON M.ItmsGrpCod=B.ItmsGrpCod
INNER JOIN OWHS S ON W.WhsCode=S.WhsCode
WHERE V.DocDate BETWEEN '20130101' AND '20140430' AND W.WhsCode = 02
GROUP BY V.ItemCode, S.whsname, W.OnHand, V.Dscription
ORDER BY V.ItemCode

esto me arroja un total de 14495 items vendidos en cierto tiempo y ps obvio la cantidad vendida por cada item, hasta ahi todo estaba bien ahora me dicen que debo restarle los items que esten en la tabla de notas credito es decir que el total debe ser los items que se han vendido menos los items que se han devuelto, lo que hice fue hacer una consulta para que me muestre los items y las cantidades que se han devuelto en el mismo tiempo que la consulta anterioir asi:

1
2
3
4
5
select distinct ItemCode, SUM(Quantity) AS CANTIDAD_DEVUELTA, WhsCode as bodega
from RIN1
where DocDate BETWEEN '20130101' AND '20140430' and WhsCode=02
GROUP BY ItemCode, WhsCode
ORDER BY ItemCode

esto me muestra que se devolvieron 2320 items en la fecha del 20130101 al 20140430

por ejemplo en la primera consulta me muestra que del item L1-001 NOVEX se vendieron un total de 235 y en la tabla de notas credito me dice que en ese mismo periodo se devolvieron 2 unidades del item L1-001 NOVEX es decir que en la consulta final me debe mostrar un total de vendidos del item L1-001 NOVEX de 233 intente hacer una union pero ps creo que por los group by y por que la cantidad de datos en cada consulta son diferentes no me dejo, que pena alargar tanto el tema pero ps quería que lo entendieran bn para que me puedan ayudar.

Cualquier dudan que tengan pregunten me y con gusto les contesto.

Mil gracias y espero puedan ayudarme.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

UNION DE DOS CONSULTAS

Publicado por Miguel (14 intervenciones) el 06/05/2014 15:06:08
Hola,
Probaste haciendo un left outer join entre las dos consultas? si ambas tienen el mismo nivel de agrupación, lo puedes hacer, obviamente, debes considerar temas de performance.

Nota
- Me parece extraño el distinct que ocupas en la consulta de devoluciones, pq?
- Ambas consultas deberían estar agrupadas a nivel de item, sino, podría resultar un cálculo erróneo, en mi caso, considere el código del ítem y la bodega (suponiendo que las devoluciones son para una determinada bodega).


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
select
 VTAS.CODIGO_ITEM,
 VTAS.TOTAL_VENDIDOS-NTAS.CANTIDAD_DEVUELTA AS "TOTAL_NETO"
from
 
/****Ventas****/
(
SELECT
      V.ItemCode AS CODIGO_ITEM,
      SUM(V.Quantity)AS TOTAL_VENDIDOS,
      S.whsname AS BODEGA,
      W.OnHand AS EN_STOCK
    FROM INV1 V INNER JOIN
         OITW W ON V.ItemCode=W.ItemCode inner join
         OITM M ON V.ItemCode=M.ItemCode inner join
         OITB B ON M.ItmsGrpCod=B.ItmsGrpCod INNER JOIN
         OWHS S ON W.WhsCode=S.WhsCode WHERE V.DocDate BETWEEN '20130101' AND '20140430' AND W.WhsCode = 02
GROUP BY
   V.ItemCode,
   S.whsname
ORDER BY V.ItemCode
) VTAS
 
LEFT OUTER JOIN
 
/*Notas de Credito*/
(
select distinct
	   ItemCode,
	   SUM(Quantity) AS CANTIDAD_DEVUELTA,
	   WhsCode as bodega
   from RIN1
   where DocDate BETWEEN '20130101' AND '20140430' and WhsCode=02
GROUP BY
ItemCode,
WhsCode
ORDER BY ItemCode
) NTAS
 ON NTAS.ItemCode=VTAS.ItemCode
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

UNION DE DOS CONSULTAS

Publicado por lender (10 intervenciones) el 06/05/2014 19:03:31
Muchas gracias me sirvio tu respuesta.

lo solucione con el left join
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar