SQL Server - Obtener fila con el máximo de ventas por grupo

 
Vista:
sin imagen de perfil

Obtener fila con el máximo de ventas por grupo

Publicado por MANUEL (2 intervenciones) el 26/09/2021 22:12:29
tengo una tabla de ventas, donde sumo el SUBTOTAL y lo agrupo por cliente y por vendedor, debo obtener que vendedor fue el que le vendió mas a un cliente, ya pude obtener que vendedores le vendieron y cuanto cada uno, ahora solo debo obtener de cada cliente, quien le vendió mas a cada uno de los clientes

anexo código de SQL SERVER
*********************
SELECT
RTRIM(LTRIM(BDCONSORCIO_PROD.dbo.VENTASC.CVECLI)) AS 'CLIENTE'
, RTRIM(LTRIM(BDCONSORCIO_PROD.dbo.CLIENTES.NOMEMPRESA)) AS 'NOMBRE CLIENTE'
, SUM(BDCONSORCIO_PROD.dbo.VENTASC.SUB_TOTAL) AS 'SUBTOTAL'
, RTRIM(LTRIM(BDCONSORCIO_PROD.dbo.VENTASC.CVE_PERS)) AS 'CVE VENDEDOR'
, RTRIM(LTRIM(BDCONSORCIO_PROD.dbo.PERSONAL.NOMBRE_PER)) AS 'NOMBRE VENDEDOR'

FROM
BDCONSORCIO_PROD.dbo.VENTASC
LEFT OUTER JOIN BDCONSORCIO_PROD.dbo.CLIENTES ON ( BDCONSORCIO_PROD.dbo.VENTASC.CVECLI = BDCONSORCIO_PROD.dbo.CLIENTES.CVECLI )
LEFT OUTER JOIN BDCONSORCIO_PROD.dbo.PERSONAL ON ( BDCONSORCIO_PROD.dbo.VENTASC.CVE_PERS = BDCONSORCIO_PROD.dbo.PERSONAL.CVE_PERS )

WHERE
BDCONSORCIO_PROD.dbo.VENTASC.FECHA_ALTA BETWEEN CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(DATEADD(mm,1,GETDATE()))-1),DATEADD(mm,-1,GETDATE())),23)
AND CONVERT(VARCHAR(10),GETDATE(),23) /* SOLO VENTAS HECHAS EL MES PASADO Y ESTE MES */
AND BDCONSORCIO_PROD.dbo.VENTASC.CANCE2 = 0
AND BDCONSORCIO_PROD.dbo.VENTASC.F_FINOPER BETWEEN CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(GETDATE())-1),GETDATE()),23)
AND CONVERT(VARCHAR(10),GETDATE(),23) /* SOLO VENTAS PAGADAS COMPLETAMENTE EN ESTE MES */
AND RTRIM(LTRIM( ISNULL(BDCONSORCIO_PROD.dbo.VENTASC.CVE_PERS,'NC')))
NOT IN ('CEAB', 'CJLC', 'CRIS', 'FRSC', 'JUFE', 'PINA', 'VIKY', 'NC') /* EXCLUYE A ESTOS VENDEDORES */

GROUP BY BDCONSORCIO_PROD.dbo.VENTASC.CVECLI
, BDCONSORCIO_PROD.dbo.CLIENTES.NOMEMPRESA
, BDCONSORCIO_PROD.dbo.VENTASC.CVE_PERS
, BDCONSORCIO_PROD.dbo.PERSONAL.NOMBRE_PER

ORDER BY CLIENTE, SUBTOTAL DESC
*******************

ya intente usar una subconsulta pero me repite el maximo en cada uno de los diferentes vendedores de cada cliente, y solo nececito el vendedor que mas vendio a cada cliente

les agradeceria mucho si me pueden orientar
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
sin imagen de perfil

Obtener fila con el máximo de ventas por grupo

Publicado por Manuel (2 intervenciones) el 27/09/2021 07:53:16
Ya conseguí hacerlo, gracias de cualquier forma, anexo código

**********************************************************************************
SELECT
VENTAS.CLIENTE
, VENTAS.[NOMBRE CLIENTE]
, VENTAS.SUBTOTAL
, VENTAS.[CVE VENDEDOR]
, VENTAS.[NOMBRE VENDEDOR]

FROM (
SELECT
RTRIM(LTRIM(BDCONSORCIO_PROD.dbo.VENTASC.CVECLI)) AS 'CLIENTE'
, RTRIM(LTRIM(BDCONSORCIO_PROD.dbo.CLIENTES.NOMEMPRESA)) AS 'NOMBRE CLIENTE'
, SUM(BDCONSORCIO_PROD.dbo.VENTASC.SUB_TOTAL) AS 'SUBTOTAL'
, MAX(SUM(BDCONSORCIO_PROD.dbo.VENTASC.SUB_TOTAL)) OVER (PARTITION BY BDCONSORCIO_PROD.dbo.VENTASC.CVECLI) AS 'MAXIMO'
, RTRIM(LTRIM(BDCONSORCIO_PROD.dbo.VENTASC.CVE_PERS)) AS 'CVE VENDEDOR'
, RTRIM(LTRIM(BDCONSORCIO_PROD.dbo.PERSONAL.NOMBRE_PER)) AS 'NOMBRE VENDEDOR'

FROM
BDCONSORCIO_PROD.dbo.VENTASC
LEFT OUTER JOIN BDCONSORCIO_PROD.dbo.CLIENTES ON ( BDCONSORCIO_PROD.dbo.VENTASC.CVECLI = BDCONSORCIO_PROD.dbo.CLIENTES.CVECLI )
LEFT OUTER JOIN BDCONSORCIO_PROD.dbo.PERSONAL ON ( BDCONSORCIO_PROD.dbo.VENTASC.CVE_PERS = BDCONSORCIO_PROD.dbo.PERSONAL.CVE_PERS )

WHERE
BDCONSORCIO_PROD.dbo.VENTASC.FECHA_ALTA BETWEEN CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(DATEADD(mm,1,GETDATE()))-1),DATEADD(mm,-1,GETDATE())),23)
AND CONVERT(VARCHAR(10),GETDATE(),23) /* SOLO VENTAS HECHAS EL MES PASADO Y ESTE MES */
AND BDCONSORCIO_PROD.dbo.VENTASC.CANCE2 = 0
AND BDCONSORCIO_PROD.dbo.VENTASC.F_FINOPER BETWEEN CONVERT(VARCHAR(10),DATEADD(dd,-(DAY(GETDATE())-1),GETDATE()),23)
AND CONVERT(VARCHAR(10),GETDATE(),23) /* SOLO VENTAS PAGADAS COMPLETAMENTE EN ESTE MES */
AND RTRIM(LTRIM( ISNULL(BDCONSORCIO_PROD.dbo.VENTASC.CVE_PERS,'NC')))
NOT IN ('CEAB', 'CJLC', 'CRIS', 'FRSC', 'JUFE', 'PINA', 'VIKY', 'NC') /* EXCLUYE A ESTOS VENDEDORES */

GROUP BY BDCONSORCIO_PROD.dbo.VENTASC.CVECLI
, BDCONSORCIO_PROD.dbo.CLIENTES.NOMEMPRESA
, BDCONSORCIO_PROD.dbo.VENTASC.CVE_PERS
, BDCONSORCIO_PROD.dbo.PERSONAL.NOMBRE_PER

) AS VENTAS

WHERE VENTAS.SUBTOTAL = VENTAS.MAXIMO

ORDER BY CLIENTE, SUBTOTAL DESC
********************************************************************************


1
2
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