15/08/2012, 12:45
|
| Colaborador | | Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años Puntos: 38 | |
Respuesta: Union y resta de dos querys Asumiendo que se trata de una diferencia de inventario vs salidas y que el campo llave es ItemCode
Lo podrias realizar con un full join con el cual aun cuando no exista inventario te aparecerian las salidas de productos.
Otra opcion seria un LEFT JOIN, pero ya dependeria del escenario que desees contemplar..
En esta liga se explica brevemente cada tipo de outer join. Usar combinaciones externas
Código:
SELECT ISNULL(S.[itemcode], P.[itemcode]) [itemcode]
,ISNULL(S.[dscription], P.[dscription]) [dscription]
,ISNULL(S.Cantidad, 0) - ISNULL(P.Cantidad, 0) Cantidad
,ISNULL(S.Total, 0) - ISNULL(P.Total, 0) Total
FROM (
SELECT T3.[itemcode],
T3.[dscription],
T2.[cardcode],
T2.[cardname],
Cantidad=Sum(T3.[quantity]),
T3.[unitmsr],
Total=Sum(T3.[totalsumsy])
FROM [dbo].[oinv] T2
INNER JOIN [dbo].[inv1] T3
ON T2.docentry = T3.docentry
WHERE T2.[doctype] <> 'S'
AND T2.[docdate] >= '[%0]'
AND T2.[docdate] <= '[%1]'
GROUP BY T3.[itemcode],
T3.[dscription],
T2.[cardcode],
T2.[cardname],
T3.[quantity],
T3.[unitmsr],
T3.[totalsumsy]
) S
FULL JOIN (
SELECT T1.[itemcode],
T1.[dscription],
T0.[cardcode],
T0.[cardname],
Cantidad=Sum(T1.[quantity]),
T1.[unitmsr],
Total=Sum(T1.[totalsumsy])
FROM orin T0
INNER JOIN rin1 T1
ON T0.docentry = T1.docentry
WHERE T0.[doctype] <> 'S'
AND T0.[docdate] >= '[%0]'
AND T0.[docdate] <= '[%1]'
GROUP BY T1.[itemcode],
T1.[dscription],
T0.[cardcode],
T0.[cardname],
T1.[quantity],
T1.[unitmsr],
T1.[totalsumsy]
) P
ON S.[itemcode] = p.[itemcode]
ORDER BY ISNULL(S.[itemcode], P.[itemcode])
Saludos!
__________________ La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications. |