none
DATEPART RRS feed

  • Pregunta

  • Buen día a todos compañeros,

    tengo una duda estoy realizando una consulta en donde tengo que contar el numero de mis clientes que tengan ventas mayores a 5000 pesos por vendedor por numero de semana pero aun no se como realizarla sinceramente tengo partes de este tema ya que no se como. 

    Como se muestra ya tengo el campo para ver mi vendedor, tengo un campo que me trae el numero de la semana, después hice una tipo subconsulta en donde me trae el conteo de los clientes pero no se como ponerle que me los traiga por vendedor por el numero de semana al igual que en mis ventas me trae todas las ventas no se como agregar que solo sea la de esa semana por vendedor por cliente. 

    Alguien podría ayudarme?

    SELECT
    T4.[SlpName] as 'Vendedor',
    DATEPART (WW, T0.[DocDate]) as 'NumeroSemana',
    (SELECT Count(S0.[CardCode]) FROM OINV S0 INNER JOIN INV1 S1 ON S0.[DocEntry] = S1.[DocEntry] WHERE S0.[CardCode] = T0.[CardCode]) as 'Cantidad Clientes',
    (SELECT Sum(CASE WHEN S0.[Canceled] = 'C'  THEN  ((S1.[LineTotal] * -1) / S6.[Rate]) ELSE (S1.[LineTotal] / S6.[Rate]) END) FROM OINV S0 INNER JOIN INV1 S1 ON S0.[DocEntry] = S1.[DocEntry] LEFT JOIN OITM S2 ON S1.[ItemCode] = S2.[ItemCode] LEFT JOIN OITB S3 ON S2.[ItmsGrpCod] = S3.[ItmsGrpCod] INNER JOIN OSLP S4 ON S0.[SlpCode] = S4.[SlpCode] INNER JOIN OCRD S5  ON S5.[CardCode] = S0.[CardCode] INNER JOIN ORTT S6 ON S0.[DocDate] = S6.[RateDate]  WHERE S0.[CardCode] = T0.[CardCode]) as 'Ventas'
    
    
    FROM OINV T0  
    INNER JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry] 
    LEFT JOIN OITM T2 ON T1.[ItemCode] = T2.[ItemCode] 
    LEFT JOIN OITB T3 ON T2.[ItmsGrpCod] = T3.[ItmsGrpCod] 
    INNER JOIN OSLP T4 ON T0.[SlpCode] = T4.[SlpCode] 
    INNER JOIN OCRD T5  ON T5.[CardCode] = T0.[CardCode] 
    INNER JOIN ORTT T6 ON T0.[DocDate] = T6.[RateDate] 
    
    
    WHERE Year(T0.[DocDate]) = '2021' 
    



    • Editado Louisa_E viernes, 5 de febrero de 2021 17:19
    viernes, 5 de febrero de 2021 17:09

Todas las respuestas

  • Hola Louisa_E:

    Es bastante difícil poder ayudarte, cuando no se saben ni las tablas, ni las relaciones, ni hay un escenario, ni datos.

    Pero de la consulta, que no se si te vale, veo cosas a cambiar.

    SELECT
    	T4.[SlpName] as Vendedor,
    	DATEPART (WW, T0.[DocDate]) as NumeroSemana,
    	Count(T0.cardcode) as [Cantidad Clientes],
    	Sum(Case When t0.canceled = 'C' 
    			Then(t1.linetotal * -1) / t6.rate
    			Else t1.linetotal / t6.rate
        End) As Ventas
    
    
    	FROM OINV T0  
    		INNER JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry] 
    		LEFT JOIN OITM T2 ON T1.[ItemCode] = T2.[ItemCode] 
    		INNER JOIN OSLP T4 ON T0.[SlpCode] = T4.[SlpCode] 
    		INNER JOIN ORTT T6 ON T0.[DocDate] = T6.[RateDate] 
    	WHERE Year(T0.[DocDate]) = '2021'
    	GROUP BY T4.[SlpName], DATEPART (WW, T0.[DocDate])

    Para que hacer subconsultas, con las mismas tablas que tenemos en la consulta exterior. Esto solo te penalizará en rendimiento.

    Para que incluir conjuntos como T3 y T5 que no usamos.

    Puedes agrupar por los valores que se muestran y utilizar tanto el conteo como sum en la consulta exterior.

    Group by

    https://javifer2.wordpress.com/2019/10/04/group-by-quizas-la-clausula-mas-conflictiva/

    sábado, 6 de febrero de 2021 8:37