Usuário com melhor resposta
usando o top especial

Pergunta
-
Boa tarde a todos,
estou precisando criar uma query da seguinte forma:
preciso que apresente pra mim uma lista com o código do vendedor e cada vendedor traga os 5 maiores clientes deles. Seria algo mais ou menos assim:
Alguém sabe me dizer como posso fazer isso?
Respostas
-
Boa tarde,
Experimente utilizar a função Row_Number() com o argumento Partition By. Ex:
with CTE_RN as ( select *, ROW_NUMBER() OVER(PARTITION BY COD_VEND ORDER BY Total DESC) as RN from Tabela ) select * from CTE_RN where RN <= 5
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Kanaãm Luz Romero Rodrigues sexta-feira, 13 de novembro de 2015 17:43
- Marcado como Resposta Marcos SJ sexta-feira, 13 de novembro de 2015 17:52
Todas as Respostas
-
Boa tarde,
Experimente utilizar a função Row_Number() com o argumento Partition By. Ex:
with CTE_RN as ( select *, ROW_NUMBER() OVER(PARTITION BY COD_VEND ORDER BY Total DESC) as RN from Tabela ) select * from CTE_RN where RN <= 5
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Kanaãm Luz Romero Rodrigues sexta-feira, 13 de novembro de 2015 17:43
- Marcado como Resposta Marcos SJ sexta-feira, 13 de novembro de 2015 17:52
-
Obrigado Kanaãm pela resposta,
Como faço para encaixar seu código nesse meu:
select A1_VEND COD_VEND, A1_COD CODIGO, A1_LOJA LOJA, A1_NOME NOME_CLI, CASE WHEN A1_X_TPCLI ='C' THEN 'CONSTRUTORA' WHEN A1_X_TPCLI ='R' THEN 'REVENDEDOR' WHEN A1_X_TPCLI ='F' THEN 'CONS FINAL' WHEN A1_X_TPCLI =' ' THEN '' END AS TIPO_CLI, sum(D2_QUANT) qtde, sum(D2_TOTAL) Total from SD2010 D2 INNER JOIN SA1010 ON D2_CLIENTE=A1_COD AND D2_LOJA=A1_LOJA INNER JOIN SF4010 ON D2_TES=F4_CODIGO INNER JOIN SC5010 ON D2_PEDIDO=C5_NUM INNER JOIN SB1010 ON D2_COD=B1_COD INNER JOIN SF2010 ON D2_DOC=F2_DOC,SA3010 where D2.D2_LOCAL='01' and YEAR(D2_EMISSAO) = YEAR(GETDATE())-0 AND D2_COD >= '100001' AND D2_COD <= '199999' and A1_X_TPCLI <>'C' AND A3_COD=F2_VEND1 AND F4_DUPLIC='S' -- and A1_VEND='000102' AND SA1010.D_E_L_E_T_ <> '*' AND SC5010.D_E_L_E_T_ <> '*' and D2.D_E_L_E_T_ <> '*' group by A1_VEND,A1_COD,A1_LOJA,A1_NOME,A1_X_TPCLI ORDER BY SUM(D2_TOTAL) DESC, A1_VEND
-
Experimente mais ou menos dessa forma:
with CTE_RN as ( select ROW_NUMBER() OVER(PARTITION BY A1_VEND ORDER BY SUM(D2_TOTAL) DESC) as RN, -- ... restante da sua query original sem o Order By ) select * from CTE_RN where RN <= 5
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br