cancel
Showing results for 
Search instead for 
Did you mean: 

Ayuda Query

Former Member
0 Kudos

Jóvenes experto me solicitaron un reporte en donde por medio de los artículos me de la cantidad solicitada en las Ordenes de Venta como de las Ordenes de Compras por mes de las que tenga estatus abierto, yo realice el siguiente query pero resulta que si me muestra las cantidades solicitadas de los dos documentos pero me aparecen algunos artículos con valor NULL en las dos columnas hay alguna forma de quitar esto, esa es una y si me podrían indicar o dar una idea de como puedo colocarlo las ordenes de venta y de compra por mes.

Dejo el query que realice.


SELECT DISTINCT T0.ItemCode, T0.ItemName, T0.[SWW],
(Select sum(Y.Quantity) From ORDR A INNER JOIN 
		 RDR1 Y ON A.DocEntry = Y.DocEntry 
		 where Y.ItemCode = T0.ItemCode AND A.[DocStatus] = 'O') as 'Ordenes de Venta',
(Select SUM(C.Quantity) From OPOR B  INNER JOIN 
			POR1 C ON B.DocEntry = C.DocEntry 
			where C.ItemCode = T0.ItemCode AND B.[DocStatus] = 'O') as 'Ordenes de Compra'
FROM OITM T0
ORDER BY T0.ItemCode

De antemano muy agradecido por su ayuda.

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Jóvenes experto realice otro query ya con la información que necesito pero tengo un problema cuando en el subquery le coloco la condición de cuando el estado de la linea sea abierto sigan con la condición no lo respeta me coloca todas las lineas incluyendo las cerradas y la verdad ya trate de colocarle la condicion en el where principal pero cuando lo coloco ahí ya no me despliega información.

Espero me pueda ayudar.

Este es el query:


SELECT DISTINCT t2.itemcode, t2.itemname, t2. sww,t1.docdate, t0.docentry, 
	(CASE WHEN exists (Select * from rdr1 a where a.linestatus = 'O' ) 
		   and exists (select * from RDR1 A where A.DocDate = T1.DocDate)
		   and exists (select * from rdr1 a where MONTH(T1.DocDate) = '01')
		  THEN sum(T1.quantity) end)as 'OV ENERO',
	(CASE WHEN exists (Select * from rdr1 a where a.linestatus = 'O' ) 
		   and exists (select * from RDR1 A where A.DocDate = T1.DocDate)
		   and exists (select * from rdr1 a where MONTH(T1.DocDate) = '02')
		  THEN sum(T1.quantity) end)as 'OV Febrero'
FROM ORDR T0  INNER JOIN 
	 RDR1 T1 ON T0.DocEntry = T1.DocEntry INNER JOIN 
	 OITM T2 ON T1.ItemCode = T2.ItemCode 
WHERE t1.docdate >= '20110101' and t1.docdate <='20110228'
GROUP BY t2.itemcode, t2.itemname, t2. sww,t1.docdate, t0.docentry, t1.linestatus
ORDER BY t2.itemcode

De antemano muy gradecido por su ayuda.

Saludos

Former Member
0 Kudos

Intenta esto

SELECT DISTINCT t2.itemcode, t2.itemname, t2. sww,t1.docdate, t0.docentry, 
	Month = Case When month(T1.DocDate) = 1 then 'Enero' else 'Febrero' end, Cantidad = Sum(T1.Quantity)
FROM ORDR T0  INNER JOIN 
	 RDR1 T1 ON T0.DocEntry = T1.DocEntry INNER JOIN 
	 OITM T2 ON T1.ItemCode = T2.ItemCode 
WHERE t1.docdate >= '20110101' and t1.docdate <='20110228' and T1.linestatus = 'O'
GROUP BY t2.itemcode, t2.itemname, t2. sww,t1.docdate, t0.docentry
ORDER BY t2.itemcode

Former Member
0 Kudos

Gracias el_chente si me despliega la información que necesito pero voy a ver si puedo modificar un poco el query dado que lo necesito por mes eso quiere decir que necesito generarlo por todo el año o por mes o trimestre etc.

Siempre te lo agradezco, vamos a ver como me queda sino vuelvo a pedir ayuda.

Gracias y saludos

Former Member
0 Kudos

Si lo necesitas por rango de meses lo puedes hacer de esta manera

Declare @MesInicial int,
             @MesFinal int

Set @MesInicial = 1
Set @MesFinal = 3

SELECT DISTINCT t2.itemcode, t2.itemname, t2. sww,t1.docdate, t0.docentry, 
	Month = DateName(month,T1.DocDate), Cantidad = Sum(T1.Quantity)
FROM ORDR T0  INNER JOIN 
	 RDR1 T1 ON T0.DocEntry = T1.DocEntry INNER JOIN 
	 OITM T2 ON T1.ItemCode = T2.ItemCode 
WHERE month(t1.docdate) between @mesinicial and @mesfinal end and T1.linestatus = 'O'
GROUP BY t2.itemcode, t2.itemname, t2. sww,t1.docdate, t0.docentry
ORDER BY t2.itemcode

Lo unico es que la funcion DateName te da el nombre del mes en ingles, pero lo puedes cambiar por un case para cada mes, y adaptarlo para que distinga entre ejercicios

Saludos

Former Member
0 Kudos

Gracias el_chente23 por la ayuda quedo perfecto.

Answers (0)