Query con UNION

Estimados,

Estoy tratando de hacer un reporte de ventas en la unidad de medida de volumen (m3) por almacén y por grupo de item solo de ciertos items (definidos por una Propiedad). Si corro los querys de Facturas y Notas de Credito por separado me funcionan bien pero al juntarlos con UNION ALL me da errores y mis conocimientos de SQL son básicos. Les agradeceria si alguien lo puede revisar y ver que esta mal.

SELECT S.Bodega, S.Linea, S.Proveedor, SUM (S.Volumen) FROM (SELECT T0.WhsCode AS 'Bodega', T2.ItmsGrpNam AS 'Linea', T3.FirmName AS 'Proveedor', SUM(T0.Quantity * T1.Svolume) AS 'Volumen' FROM INV1 T0 INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode INNER JOIN OITB T2 ON T1.ItmsGrpCod = T2.ItmsGrpCod INNER JOIN OMRC T3 ON T1.FirmCode = T3.FirmCode INNER JOIN OINV T4 ON T0.DocEntry = T4.DocEntry WHERE T4.DocDate BETWEEN [%0] AND [%1] AND T1.QryGroup3 = 'Y' UNION ALL T0.WhsCode AS 'Bodega', T2.ItmsGrpNam AS 'Linea', T3.FirmName AS 'Proveedor', SUM(-T0.Quantity * T1.Svolume) AS 'Volumen' FROM RIN1 T0 INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode INNER JOIN OITB T2 ON T1.ItmsGrpCod = T2.ItmsGrpCod INNER JOIN OMRC T3 ON T1.FirmCode = T3.FirmCode INNER JOIN ORIN T4 ON T0.DocEntry = T4.DocEntry WHERE T4.DocDate BETWEEN [%0] AND [%1] AND T1.QryGroup3 = 'Y') S GROUP BY S.Bodega, S.Linea, S.Proveedor

Gracias por su ayuda.

LV

Hola :grin:!

Te recomiendo que veas un tutorial de SQL, en internet o Youtube existen decenas, es facil, rapido, gratis y te servira de por vida! :smiley:

Respecto a tu Query, de la forma correcta quedaria asi (Recuerda siempre tabular cualquier consulta o sentencia SQL para que sea mas facil de leer y entender)

SELECT 
	S.Bodega, S.Linea, S.Proveedor, SUM (S.Volumen) 
FROM (SELECT 
		T0.WhsCode AS 'Bodega', T2.ItmsGrpNam AS 'Linea', T3.FirmName AS 'Proveedor', SUM(T0.Quantity * T1.Svolume) AS 'Volumen' 
	  FROM 
		INV1 T0 INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode 
		INNER JOIN OITB T2 ON T1.ItmsGrpCod = T2.ItmsGrpCod 
		INNER JOIN OMRC T3 ON T1.FirmCode = T3.FirmCode 
		INNER JOIN OINV T4 ON T0.DocEntry = T4.DocEntry 
	  WHERE 
		T4.DocDate BETWEEN [%0] AND [%1] AND T1.QryGroup3 = 'Y' 
	  GROUP BY 
		T0.WhsCode , T2.ItmsGrpNam , T3.FirmName 
	  UNION ALL 
	  SELECT 
		T0.WhsCode AS 'Bodega', T2.ItmsGrpNam AS 'Linea', T3.FirmName AS 'Proveedor', SUM(-T0.Quantity * T1.Svolume) AS 'Volumen' 
	  FROM 
		RIN1 T0 INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode 
		INNER JOIN OITB T2 ON T1.ItmsGrpCod = T2.ItmsGrpCod 
		INNER JOIN OMRC T3 ON T1.FirmCode = T3.FirmCode 
		INNER JOIN ORIN T4 ON T0.DocEntry = T4.DocEntry 
	  WHERE 
		T4.DocDate BETWEEN [%0] AND [%1] AND T1.QryGroup3 = 'Y'
	  GROUP BY 
		T0.WhsCode , T2.ItmsGrpNam , T3.FirmName 
		) S 
GROUP BY 
	S.Bodega, S.Linea, S.Proveedor

Saludos :vulcan_salute:

4 Me gusta

Funciona perfecto! Si he visto un par de tutoriales y estoy leyendo bastante al respecto pero creo que en estos casos solo la práctica hace al maestro. Gracias y Felices fiestas!

LV

2 Me gusta

Perfecto!

Recuerda marcar la respuesta como solucion para mantener el orden dentro del foro.:smiley:

Saludos! :vulcan_salute:

1 me gusta