none
usando o top especial RRS feed

  • 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?

    sexta-feira, 13 de novembro de 2015 17:06

Respostas

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

    sexta-feira, 13 de novembro de 2015 17:15
  • 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
    

    sexta-feira, 13 de novembro de 2015 17:58
  • 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

    sexta-feira, 13 de novembro de 2015 18:13