none
Consulta com COUNT RRS feed

  • Pergunta

  • Boa noite Pessoal,

    Preciso realizar uma consulta onde conto somente as vendas onde tem produtos a mais, os quais chamamos de venda adicional, abaixo filtrei por 1 vendedor no excel para fica mais facil a compreenção:

    SELECT L2_VEND AS 'CODIGO VENDEDOR', A3_NOME AS 'NOME VENDEDOR', L2_PRODUTO AS 'CODIGO DO PRODUTO', L2_DESCRI AS 'DESCICAO DO PRODUTO', L2_QUANT AS 'QUANTIDADE', L2_VRUNIT AS 'VALOR VENDA', L2_PRCTAB AS 'VALOR TABELA', L2_EMISSAO AS 'DATA', L2_DOC AS 'DOCUMENTO', L2_FILIAL AS 'LOJA', L2_XRECEIT AS 'RECEITA'
    FROM SL2010 L2, SA3010
    WHERE L2_VEND = A3_COD
    AND L2_EMISSAO BETWEEN ? AND ?
    AND L2_VEND <> '000001'
    AND L2.D_E_L_E_T_ = ''
    
    GROUP BY L2_VEND, A3_NOME, L2_PRODUTO, L2_DESCRI, L2_QUANT, L2_VRUNIT, L2_PRCTAB, L2_EMISSAO, L2_DOC, L2_FILIAL, L2_XRECEIT

    Explicando, nesta consulta eu trouxe os ITENS DA VENDA, onde o campo L2_DOC é referente a venda, então como podemos ver abaixo o numero do documento se repete em varios itens, isso quer dizer que esses itens fazem parte da mesma venda. 


    Agora vamos ao que preciso, abaixo gerei uma consulta contando essas linhas :

    SELECT L2_VEND AS 'CODIGO VENDEDOR', A3_NOME AS 'NOME VENDEDOR', COUNT(ALL L2_DOC) AS 'VENDAS ADICIONAIS'
    FROM SL2010 L2, SA3010
    WHERE
    L2_VEND = A3_COD
    AND L2_EMISSAO BETWEEN ? AND ?
    AND L2.D_E_L_E_T_ = ''
    
    
    GROUP BY L2_VEND, A3_NOME

    CODIGO VENDEDOR NOME VENDEDOR VENDAS ADICIONAIS
    000341 AMANDA XAVIER                            64

    Porem preciso contar considerando alguns parâmetros, como esta claro na consulta são itens de ótica, então vou detalhar considerando isso, o que consideramos uma venda padrão são as que contem 1 armação e 1 par de lentes (podendo ser apenas 1 unidade) ou 1 óculos de sol, ou seja, se a venda tiver em seus itens 1 armação e 1 lente (ou duas) ou se for uma venda com apenas 1 óculos de sol, não quero incluir na minha contagem. Preciso contar as vendas que tem em seus itens  mais de 1 armação ou mais de 2 lentes ou as que tem 1 armação e as lentes e 1 ou mais óculos de sol, pois essas são as vendas adicionais. 

    Neste tabela tenho L2_PRODUTO que é o código do produto, que  para poder filtrar teremos que armar com a tabela de cadastro de produtos que neste caso é a SB1010, assim L2_PRODUTO = B2_COD, para trazer o campo B2_TIPO, ai teremos os tipos abaixo:

    LT = LENTES

    AR = ARMACOES

    OC = SOLARES

    Então sendo assim digamos que preciso contar as vendas quando tiver números de documento (L2_DOC) 

    QUANDO B1_TIPO = 'LT'  TIVER (COUNT L2_DOC) > 2

    QUANDO B1_TIPO = 'OC' TIVER (COUNT L2_DOC) > 1

    QUANDO B1_TIPO = 'AR' TIVER (COUNT L2_DOC) > 1 

    OU QUANDO A CONTAGEM DO L2_DOC TIVER 1 OU 2 B1_TIPO = 'LT' e B1_TIPO = 'OC' (vendas em que tem armacao e solar junto)

    Não sei se é possível gerar essa consulta mas se puderem me ajudar com uma luz fico imensamente agradecido!

    Desde já grato!


    domingo, 14 de maio de 2017 00:17

Respostas

Todas as Respostas

  • Deleted
    domingo, 14 de maio de 2017 01:06
  • Jonathan, algumas dúvidas iniciais:

    • A numeração de documento é única para toda a empresa ou é numerada por filial?
    • O relatório final deve ser geral da empresa ou é para ser por filial/vendedor ou outra combinação?
    • Se a venda tiver sido 1 AR + 2 LT + 1 OC, o que deve ser considerado como adicional: o 1 OC ou o (1 AR + 2 LT)?

          José Diz     Belo Horizonte, MG - Brasil


    Boa noite José,

    Primeiramente obrigado pelo retorno! 

    A numeração do documento é unica por venda, ou seja, se foi vendido em uma venda produtos, todos vão ter o mesmo número de documento, assim por diante nas demais vendas. 

    O relatório deve ser por vendedor, preciso contar quantas vendas adicionais cada vendedor fez. Por exemplo, o vendedor fez ao total 50 vendas, destas vendas 20 tiveram produtos adicionais.  Não preciso constar a filial, o relatório sera tratado somente por vendedor. 

    Se a venda tiver sido 1 AR + 2 LT + 1 OC, o que será considerado adicional é OC.

    Vou citar outros exemplos:

    Se a venda tiver 1 AR somente (não teve produto adicional e esse documento não deve ser contado)

    Se a venda tiver 2 AR ou mais (essa teve produto adicional e esse documento deve ser contado)

    Se a venda tiver 1 AR + 1 LT (não teve produto adicional e  esse documento não deve ser contado)

    Se a venda tiver 1 AR + 2 LT (não teve produto adicional e esse documento não deve ser contado)

    Se a venda tiver 1 AR + 3 LT ou mais (essa teve produto adicional e esse documento deve ser contada)

    Se a venda tiver 1 OC (não teve produto adicional e esse documento não deve ser contado)

    Se a venda tiver 2 OC ou mais (esse teve produto adicional e esse documento deve ser contado)

    Se a venda tiver 2 LT  + 1 OC (não teve produto adicional e esse documento não deve ser contado)

    Lembrando que estamos contado dentro da tabela de itens da venda, assim o numero do documento aparece a quantidade de vezes que tiver de itens vendidos, e eu preciso que se por exemplo, uma venda teve 5 itens vendidos, a contagem não pode ser 5, tem que ser 1.

    No exemplo eu citei somente 1 vendedor, mas existem vários vendedores.. E o relatório tem que ser por vendedor:

    Por exemplo

    CODIGO VENDEDOR NOME VENDEDOR VENDAS ADICIONAIS
    000341 AMANDA XAVIER                            64
    000353 ANGELICA PARMA RODRIGUES                 84
    000387 BIANCA DA SILVA                          82
    000446 CAMILA DISEL SCHIMIDT                    107

    Obrigado novamente pelo suporte! 



    domingo, 14 de maio de 2017 01:42
  • Deleted
    domingo, 14 de maio de 2017 14:19
  • Eis um esboço do código proposto.

    -- código #1 v3
    
    -- informe período de emissão (formato aaaammdd)
    declare @dataInicial char(8), @dataFinal char(8);
    set @dataInicial= '20170401';
    set @dataFinal= '20170430';
    
    --
    with 
    -- quantifica tipos de itens vendidos por vendedor/documento
    cteVendasTipo as (
    SELECT T1.L2_VEND, T1.L2_DOC, 
           qtdLT= sum(case when T2.B1_TIPO = 'LT' then 1 else 0 end),
           qtdAR= sum(case when T2.B1_TIPO = 'AR' then 1 else 0 end),
           qtdOC= sum(case when T2.B1_TIPO = 'OC' then 1 else 0 end),
           qtdItens= count(*)
      from SL2010 as T1
           inner join SB1010 as T2 on T2.B1_COD = T1.L2_PRODUTO
      where T1_EMISSAO between @dataInicial and @dataFinal
            and T1.L2_VEND <> '000001'
            and T1.L2_VEND = '000341'  -- somente para teste
            and T1.D_E_L_E_T_ = ''
      group by T1.L2_VEND, T1.L2_DOC
    ),
    -- quantifica vendas adicionais por vendedor/documento
    cteVendasAdic as (
    SELECT L2_VEND, L2_DOC,
           sum(qtdItens - 
                 (case when qtdAR = 1 and qtdLT = 0 and qtdOC = 0 then 1
    when qtdAR = 1 and qtdLT = 1 and qtdOC = 0 then 2 when qtdAR = 1 and qtdLT = 2 and qtdOC = 0 then 3 when qtdAR = 0 and qtdLT = 0 and qtdOC = 1 then 1 --when ...
    else 0 end) ) as qtdAdicional from cteVendasTipo group by L2_VEND, L2_DOC ) -- SELECT T3.L2_VEND as [CÓDIGO VENDEDOR], T4.A3_NOME as [NOME VENDEDOR],
    count(*) as qtdVendasAdic from cteVendasAdic as T3 inner join SA3010 as T4 on T4.A3_COD = T3.L2_VEND where T3.qtdAdicional > 0
    group by T3.L2_VEND, T4.A3_NOME;


    Em cteVendasTipo são calculados, para cada documento, quantos itens foram vendidos para AR, LT, OC e totais de itens vendidos (qtdItens) no documento. A partir das informações de cteVendasTipo há outra etapa (cteVendasAdic) que é subtrair de qtdItens os itens que são considerados venda padrão, armazenando o resultado em qtdAdicional. Ao final do cálculo, se o valor de qtdAdicional for maior do que 0, significa que houve venda adicional.

    Os casos de venda padrão são definidos em cteVendasAdic e subtraídos do total de itens de cada documento. Avalie se na construção case when ... end está faltando alguma venda padrão.

    A impressão que tenho é que existem 3 tipos de venda: venda padrão; venda padrão +adicionais; venda não padrão. Por venda não padrão seria, por exemplo, o cliente comprar somente spray para óculos e mais nada.


        José Diz     Belo Horizonte, MG - Brasil



    José, amigo, muito obrigado pelo retorno, rodei seu código aqui e creio que ficou 100%, só tem um detalhe que não me atentei nas informações anteriores, assim tenho como ''ignorar'' os código de produtos e tipos abaixo:

    Código de produto: '2000780' , '2000359' , '2000611'

    e os Tipos: 'GC' , 'LC', 'BN'

    Ou seja, independente do que for vendido, esses itens não são considerados 'itens adicionais', por exemplo, se for vendido um solar 'OC' + 'GC', esta venda não sera contada como venda adicional e assim por diante. 

    Amigo, infinitamente grato pela sua ajuda, muito importante pois estamos rodando uma premiação para nossos vendedores por vendas adicionais.

    Abraços!!

    domingo, 14 de maio de 2017 15:28
  • Deleted
    domingo, 14 de maio de 2017 17:18
  • (...) tenho como ''ignorar'' os código de produtos e tipos abaixo:
        Código de produto: '2000780' , '2000359' , '2000611'
        e os Tipos: 'GC' , 'LC', 'BN'

    Jonathan, os produtos e tipos de produtos acima mencionados devem ser ignorados totalmente, como se não tivessem sido vendidos? Se for isto, todos os itens que não devam fazer parte do levantamento podem ser definidos na cláusula WHERE de cteVendasTipo.

    Por exemplo:

    ...
    and T1.L2_VEND <> '000001' and T2.B1_TIPO not in ('GC', 'LC', 'BN')
    and T1.L2_PRODUTO not in ('2000780' , '2000359' , '2000611') and T1.D_E_L_E_T_ = ''
    ...
     

    Avalie com atenção se não falta alguma combinação que seja considerada venda padrão em cteVendasAdic. Atualmente constam 4 combinações.


           José Diz     Belo Horizonte, MG - Brasil


    José,

    Em  'cteVendasAdic' eu considero as vendas que não vão ser contadas certo? Por exemplo, se na minha venda eu tenho 1 AR + 2 LT coloco essa regra ali e ela não vai ser contada?, como você mesmo já fez ali.. 

    Veja que estranho, eu rodei a consulta para essa vendedora do exemplo, onde resultou na quantidade de 18 vendas. A vendedora tem 24 vendas ao total. Ai fui validar manualmente, contei venda a venda as que tinham item adicional e deu apenas 6 vendas. Então notei que aparentemente ele me resultou invertido, pois 24 - 18 = 6, como se ao invés de resultar as vendas adicionais, ele estivesse resultando as vendas padrão. 

    desde já grato!!

    domingo, 14 de maio de 2017 20:20
  • Deleted
    domingo, 14 de maio de 2017 20:41
  • Preciso contar as vendas que tem em seus itens mais de 1 armação ou mais de 2 lentes ou as que tem 1 armação e as lentes e 1 ou mais óculos de sol, pois essas são as vendas adicionais.
    (...) Se a venda tiver 2 OC ou mais (esse teve produto adicional e esse documento deve ser contado)

    Eis outra abordagem, considerando-se o que consta acima.

    -- código #2 v2
    
    -- informe período de emissão (formato aaaammdd)
    declare @dataInicial char(8), @dataFinal char(8);
    set @dataInicial= '20170401';
    set @dataFinal= '20170430';
    
    --
    with 
    -- quantifica tipos de itens vendidos por vendedor/documento
    cteVendasTipo as (
    SELECT T1.L2_VEND as CodVend, T1.L2_DOC as NumDoc, 
           qtdLT= sum(case when T2.B1_TIPO = 'LT' then 1 else 0 end),
           qtdAR= sum(case when T2.B1_TIPO = 'AR' then 1 else 0 end),
           qtdOC= sum(case when T2.B1_TIPO = 'OC' then 1 else 0 end)
      from SL2010 as T1
           inner join SB1010 as T2 on T2.B1_COD = T1.L2_PRODUTO
      where T1_EMISSAO between @dataInicial and @dataFinal
            and T1.L2_VEND <> '000001'
            and T1.L2_VEND = '000341'  -- somente para teste
            and T1.D_E_L_E_T_ = ''
      group by T1.L2_VEND, T1.L2_DOC
    ),
    -- seleciona documentos considerados com vendas adicionais
    cteVendasAdic as (
    SELECT CodVend, NumDoc
      from cteVendasTipo
      where qtdAR > 1         -- "mais de 1 armação"
            or qtdLT > 2      -- "ou mais de 2 lentes"
            or (qtdAR = 1 and qtdLT >= 1 and qtdOC >= 1)     -- "ou as que tem 1 armação e as lentes e 1 ou mais óculos de sol"
    or qtdOC >= 2 -- "Se a venda tiver 2 OC ou mais" ) -- SELECT T3.CodVend as [CÓDIGO VENDEDOR], T4.A3_NOME as [NOME VENDEDOR], count(*) as qtdVendasAdic from cteVendasAdic as T3 inner join SA3010 as T4 on T4.A3_COD = T3.CodVend group by T3.CodVend, T4.A3_NOME;


         José Diz     Belo Horizonte, MG - Brasil


    José, sei que estou abusando da sua paciência, e perdoe minha falta de conhecimento, mas conseguimos uma consulta para validar o que esta ultima que me passou está considerando? Tipo, uma consulta onde ele me mostre por documento quantas LT teve, quantas OC teve e quantos AR teve? Pois com esta ultima consulta ele não esta considerando alguma coisa e não achei o que é, pois por exemplo, para a vendedora 000428 ele esta trazendo 2 vendas, sendo que são 4

    Se eu conseguisse digamos que utilizando como esta consulta faz o calculo, nos mostrar assim:

    cod. vend.     nome vend.     num doc.    tipo     qtdtipo

    000428        adriana           00001        AR      2 

    000428         adriana           00001       LT       2

    Isso para validar o que ele esta contando na consulta, pois lendo a consulta esta correto, e avaliei essas 4 vendas, e e elas se enquadram no nosso filtro, não entendi porquê ele não contou. vou colocar a consulta que tenho no Excel somente destas vendas:

    CODIGO VENDEDOR NOME VENDEDOR CODIGO DO PRODUTO DESCICAO DO PRODUTO QUANTIDADE VALOR VENDA VALOR TABELA DATA DOCUMENTO
    000428 ADRIANE LIMA                             0001455         LG WHITE PROGRESSIV1.50 RES FS                     1

    011329   
    000428 ADRIANE LIMA                             0001455         LG WHITE PROGRESSIV1.50 RES FS                     1
    011329   
    000428 ADRIANE LIMA                             1000484         OC GALL SOLAR   SOL                                1
    011329   
    000428 ADRIANE LIMA                             1084684         AR ATIT 4073 G21 51 ACT                            1
    011329   
    000428 ADRIANE LIMA                             0000376         LG ESPACE1.59 POL IN                               1
    012251   
    000428 ADRIANE LIMA                             0000376         LG ESPACE1.59 POL IN                               1
    012251   
    000428 ADRIANE LIMA                             0001772         LG DNZ VISION FF1.60 RES TR/CE                     1
    012251   
    000428 ADRIANE LIMA                             0001772         LG DNZ VISION FF1.60 RES TR/CE                     1
    012251   
    000428 ADRIANE LIMA                             1083482         AR BULG 1435 02A 54 MET                            1
    012251   
    000428 ADRIANE LIMA                             1088341         AR EARM 1056 3158 55 MET                           1
    012251   
    000428 ADRIANE LIMA                             0000263         LG VS1.59 POL AR                                   1
    012283   
    000428 ADRIANE LIMA                             0000263         LG VS1.59 POL AR                                   1
    012283   
    000428 ADRIANE LIMA                             0000263         LG VS1.59 POL AR                                   1
    012283   
    000428 ADRIANE LIMA                             0000263         LG VS1.59 POL AR                                   1
    012283   
    000428 ADRIANE LIMA                             1084869         AR ARNE 7075L 2238 54 ACT                          1
    012283   
    000428 ADRIANE LIMA                             0000263         LG VS1.59 POL AR                                   1
    012284   
    000428 ADRIANE LIMA                             0000263         LG VS1.59 POL AR                                   1
    012284   
    000428 ADRIANE LIMA                             1000484         OC GALL SOLAR   SOL                                1
    012284   
    000428 ADRIANE LIMA                             1090807         AR AHIC 6269 G21 53 ACT                            1
    012284   

    Nesse filtro considerei a data de 20170501 a 20170514 e o vendedor 000428, ele resultou 2 vendas, mas como pode ver na consulta acima foram 4 documentos que atendem o filtro. Se tiveres alguma sugestão de como podemos validar o que nossa consulta esta considerando.

    Obrigado





    domingo, 14 de maio de 2017 21:43
  • Deleted
    domingo, 14 de maio de 2017 22:01
  • (...) Se eu conseguisse digamos que utilizando como esta consulta faz o calculo, nos mostrar assim

    O código #2 é uma tentativa de simplificação. Ele segue as regras que estão na primeira mensagem: "Preciso contar as vendas que tem em seus itens  mais de 1 armação ou mais de 2 lentes ou as que tem 1 armação e as lentes e 1 ou mais óculos de sol, pois essas são as vendas adicionais" e uma que você postou após: "Se a venda tiver 2 OC ou mais (esse teve produto adicional e esse documento deve ser contado)".

    O desenvolvimento do código #1 está suspenso temporariamente, pois me parece que no código #2 teremos algo mais simples de programar.

    Eis o código #2 reescrito para mostrar os valores intermediários. Antes de executar, informe o código do vendedor na linha
                                        and T1.L2_VEND = '000428'

    -- código #2 v3
    
    -- informe período de emissão (formato aaaammdd)
    declare @dataInicial char(8), @dataFinal char(8);
    set @dataInicial= '20170501'; 
    set @dataFinal= '20170514';
    
    -- (1) quantifica tipos de itens vendidos por vendedor/documento
    IF Object_ID('#tempDB..#VendasTipo', 'U') is not null
      DROP TABLE #VendasTipo;
    
    SELECT T1.L2_VEND as CodVend, T1.L2_DOC as NumDoc, 
           qtdLT= sum(case when T2.B1_TIPO = 'LT' then 1 else 0 end),
           qtdAR= sum(case when T2.B1_TIPO = 'AR' then 1 else 0 end),
           qtdOC= sum(case when T2.B1_TIPO = 'OC' then 1 else 0 end)
      into #VendasTipo
      from SL2010 as T1
           inner join SB1010 as T2 on T2.B1_COD = T1.L2_PRODUTO
      where T1_EMISSAO between @dataInicial and @dataFinal
            and T1.L2_VEND <> '000001'
            and T1.L2_VEND = '000428'  -- somente para testes: informe código do vendedor
            and T1.D_E_L_E_T_ = ''
      group by T1.L2_VEND, T1.L2_DOC;
    
    -- mostra conteúdo de #VendasTipo
    SELECT * from #VendasTipo;
    
    
    -- (2) seleciona documentos considerados com vendas adicionais
    IF Object_ID('#tempDB..#VendasAdic', 'U') is not null
      DROP TABLE #VendasAdic;
    
    SELECT CodVend, NumDoc
      into #VendasAdic
      from #VendasTipo
      where (qtdAR > 1)         -- "mais de 1 armação"
            or (qtdLT > 2)      -- "ou mais de 2 lentes"
            or (qtdAR = 1 and qtdLT >= 1 and qtdOC >= 1)     -- "ou as que tem 1 armação e as lentes e 1 ou mais óculos de sol"
            or (qtdOC >= 2);     -- "Se a venda tiver 2 OC ou mais"
    
    -- mostra conteúdo de #VendasAdic
    SELECT * from #VendasAdic;
    
    
    -- (3)
    SELECT T3.CodVend as [CÓDIGO VENDEDOR], T4.A3_NOME as [NOME VENDEDOR],
           count(*) as qtdVendasAdic
      from #VendasAdic as T3 
           inner join SA3010 as T4 on T4.A3_COD = T3.CodVend
      group by T3.CodVend, T4.A3_NOME;
    
    
    -- apaga tabelas temporárias
    IF Object_ID('#tempDB..#VendasTipo', 'U') is not null
      DROP TABLE #VendasTipo;
    IF Object_ID('#tempDB..#VendasAdic', 'U') is not null
      DROP TABLE #VendasAdic;



           José Diz     Belo Horizonte, MG - Brasil


    Não o testei; pode ocorrer algum erro de execução.

    José, estais me ajudando muito, não tenho como te agradecer! Veja, estou validando aqui os dados, sua consulta esta me ajudando a entender o que ele está e não está contando. Em seguida posto o resultado aqui se deu certo ou não. Aproveitando, tenho como incluir uma coluna onde ele mostre a quantidade de vendas (incluindo as adicionais)?

    Obrigado

    domingo, 14 de maio de 2017 23:10
  • Deleted
    domingo, 14 de maio de 2017 23:24
  • (...) Se eu conseguisse digamos que utilizando como esta consulta faz o calculo, nos mostrar assim

    O código #2 é uma tentativa de simplificação. Ele segue as regras que estão na primeira mensagem: "Preciso contar as vendas que tem em seus itens  mais de 1 armação ou mais de 2 lentes ou as que tem 1 armação e as lentes e 1 ou mais óculos de sol, pois essas são as vendas adicionais" e uma que você postou após: "Se a venda tiver 2 OC ou mais (esse teve produto adicional e esse documento deve ser contado)".

    O desenvolvimento do código #1 está suspenso temporariamente, pois me parece que no código #2 teremos algo mais simples de programar.

    Eis o código #2 reescrito para mostrar os valores intermediários. Antes de executar, informe o código do vendedor na linha
                                        and T1.L2_VEND = '000428'

    -- código #2 v3
    
    -- informe período de emissão (formato aaaammdd)
    declare @dataInicial char(8), @dataFinal char(8);
    set @dataInicial= '20170501'; 
    set @dataFinal= '20170514';
    
    -- (1) quantifica tipos de itens vendidos por vendedor/documento
    IF Object_ID('#tempDB..#VendasTipo', 'U') is not null
      DROP TABLE #VendasTipo;
    
    SELECT T1.L2_VEND as CodVend, T1.L2_DOC as NumDoc, 
           qtdLT= sum(case when T2.B1_TIPO = 'LT' then 1 else 0 end),
           qtdAR= sum(case when T2.B1_TIPO = 'AR' then 1 else 0 end),
           qtdOC= sum(case when T2.B1_TIPO = 'OC' then 1 else 0 end)
      into #VendasTipo
      from SL2010 as T1
           inner join SB1010 as T2 on T2.B1_COD = T1.L2_PRODUTO
      where T1_EMISSAO between @dataInicial and @dataFinal
            and T1.L2_VEND <> '000001'
            and T1.L2_VEND = '000428'  -- somente para testes: informe código do vendedor
            and T1.D_E_L_E_T_ = ''
      group by T1.L2_VEND, T1.L2_DOC;
    
    -- mostra conteúdo de #VendasTipo
    SELECT * from #VendasTipo;
    
    
    -- (2) seleciona documentos considerados com vendas adicionais
    IF Object_ID('#tempDB..#VendasAdic', 'U') is not null
      DROP TABLE #VendasAdic;
    
    SELECT CodVend, NumDoc
      into #VendasAdic
      from #VendasTipo
      where (qtdAR > 1)         -- "mais de 1 armação"
            or (qtdLT > 2)      -- "ou mais de 2 lentes"
            or (qtdAR = 1 and qtdLT >= 1 and qtdOC >= 1)     -- "ou as que tem 1 armação e as lentes e 1 ou mais óculos de sol"
            or (qtdOC >= 2);     -- "Se a venda tiver 2 OC ou mais"
    
    -- mostra conteúdo de #VendasAdic
    SELECT * from #VendasAdic;
    
    
    -- (3)
    SELECT T3.CodVend as [CÓDIGO VENDEDOR], T4.A3_NOME as [NOME VENDEDOR],
           count(*) as qtdVendasAdic
      from #VendasAdic as T3 
           inner join SA3010 as T4 on T4.A3_COD = T3.CodVend
      group by T3.CodVend, T4.A3_NOME;
    
    
    -- apaga tabelas temporárias
    IF Object_ID('#tempDB..#VendasTipo', 'U') is not null
      DROP TABLE #VendasTipo;
    IF Object_ID('#tempDB..#VendasAdic', 'U') is not null
      DROP TABLE #VendasAdic;



           José Diz     Belo Horizonte, MG - Brasil


    Não o testei; pode ocorrer algum erro de execução.

    José, estais me ajudando muito, não tenho como te agradecer! Veja, estou validando aqui os dados, sua consulta esta me ajudando a entender o que ele está e não está contando. Em seguida posto o resultado aqui se deu certo ou não. Aproveitando, tenho como incluir uma coluna onde ele mostre a quantidade de vendas (incluindo as adicionais)?

    Obrigado

    Jose,

    Encontrei duas coisas, um erro notório meu, que falei que o tipo para lentes era LT e na verdade era LG, corrigido no codigo. PS. desatenção minha. E precisei incluir nas  considerações de vendas a linha abaixo:

    or (qtdAR >= 1 and qtdOC >= 1) -- quando a venda tiver AR e OC somente

    E também estou mantendo os filtros abaixo:

    and T2.B1_TIPO not in ('GC', 'LC', 'BN')
    and T1.L2_PRODUTO not in ('2000780' , '2000359' , '2000611')

    pois com estes filtros eu desconsidero lentes de contato, tratamentos e insumos. 

    Infinitamente grato por seu suporte e por toda a atenção prestada comigo desde ontem. Sem palavras! 

    Atenciosamente, 

    Jonathan Santos

    domingo, 14 de maio de 2017 23:27
  • Deleted
    domingo, 14 de maio de 2017 23:53
  • CodVend NumDoc qtdLT qtdAR qtdOC
    000341 003678   0 0 1
    000341 003682   0 1 0
    ...
    000341 003746   0 0 1

    CodVend NumDoc
    000341 003674   
    000341 003709   

    CÓDIGO VENDEDOR      NOME VENDEDOR              qtdVendasAdic
    000341                      AMANDA XAVIER                           2

    Ele contou os documentos 003674 e 003709, porem não considerou na contagem os documentos 003641 e 003744.

    Tem certeza que o código para lente é LT? Observou que a coluna qtdLT está zerada em todas as linhas? Não seria LG?

    Os documentos 003641 e 003744 contém 1 AR e 1 OC. Esta combinação não consta das regras que forneceu anteriormente como para considerar como ocorrência de venda adicional.

    O código #2 lê o banco de dados e não a planilha; não é confiável comparar os resultados da consulta com o conteúdo da planilha. Para comparação confiável, execute o código #3 abaixo antes de executar o código #2.

    -- código #3
    
    -- informe período de emissão (formato aaaammdd)
    declare @dataInicial char(8), @dataFinal char(8);
    set @dataInicial= '20170501'; 
    set @dataFinal= '20170514';
    
    SELECT T1.L2_VEND, T1.L2_DOC, T1.L2_PRODUTO, T2.B1_TIPO
      from SL2010 as T1
           inner join SB1010 as T2 on T2.B1_COD = T1.L2_PRODUTO
      where T1_EMISSAO between @dataInicial and @dataFinal
            and T1.L2_VEND <> '000001'
            and T1.L2_VEND = '000428'  -- somente para testes: informe código do vendedor
            and T1.D_E_L_E_T_ = ''
      order by T1.L2_VEND, T1.L2_DOC;







     José Diz     Belo Horizonte, MG - Brasil


    Jose,

    É isso mesmo, o tipo para lentes é LG, já validei e está 100% agora, contando certinho!! Você é o cara. rsrs

    Agora pra fechar com chave de ouro, quando falei da quantidade de itens anteriormente talvez tenha me expressado mau, o que gostaria é que no total tivesse a quantidade de vendas do vendedor, segue resultado como esta:

    CÓDIGO    NOME VENDEDOR    qtdVendasAdic
    000428      ADRIANE LIMA           4                         
    
    

    como eu gostaria que tivesse:

    CÓDIGO    NOME VENDEDOR    qtdVendasAdic   qtdvendas
    000428      ADRIANE LIMA           4          17

    Onde qtdvenda seria o total de vendas do vendedor, incluindo as adicionais. Ai com esse resultado vou poder medir quantos % das vendas houve venda de produtos a mais :)

    segunda-feira, 15 de maio de 2017 00:02
  • CodVend NumDoc qtdLT qtdAR qtdOC
    000341 003678   0 0 1
    000341 003682   0 1 0
    ...
    000341 003746   0 0 1

    CodVend NumDoc
    000341 003674   
    000341 003709   

    CÓDIGO VENDEDOR      NOME VENDEDOR              qtdVendasAdic
    000341                      AMANDA XAVIER                           2

    Ele contou os documentos 003674 e 003709, porem não considerou na contagem os documentos 003641 e 003744.

    Tem certeza que o código para lente é LT? Observou que a coluna qtdLT está zerada em todas as linhas? Não seria LG?

    Os documentos 003641 e 003744 contém 1 AR e 1 OC. Esta combinação não consta das regras que forneceu anteriormente como para considerar como ocorrência de venda adicional.

    O código #2 lê o banco de dados e não a planilha; não é confiável comparar os resultados da consulta com o conteúdo da planilha. Para comparação confiável, execute o código #3 abaixo antes de executar o código #2.

    -- código #3
    
    -- informe período de emissão (formato aaaammdd)
    declare @dataInicial char(8), @dataFinal char(8);
    set @dataInicial= '20170501'; 
    set @dataFinal= '20170514';
    
    SELECT T1.L2_VEND, T1.L2_DOC, T1.L2_PRODUTO, T2.B1_TIPO
      from SL2010 as T1
           inner join SB1010 as T2 on T2.B1_COD = T1.L2_PRODUTO
      where T1_EMISSAO between @dataInicial and @dataFinal
            and T1.L2_VEND <> '000001'
            and T1.L2_VEND = '000428'  -- somente para testes: informe código do vendedor
            and T1.D_E_L_E_T_ = ''
      order by T1.L2_VEND, T1.L2_DOC;







     José Diz     Belo Horizonte, MG - Brasil


    Jose,

    É isso mesmo, o tipo para lentes é LG, já validei e está 100% agora, contando certinho!! Você é o cara. rsrs

    Agora pra fechar com chave de ouro, quando falei da quantidade de itens anteriormente talvez tenha me expressado mau, o que gostaria é que no total tivesse a quantidade de vendas do vendedor, segue resultado como esta:

    CÓDIGO    NOME VENDEDOR    qtdVendasAdic
    000428      ADRIANE LIMA           4                         

    como eu gostaria que tivesse:

    CÓDIGO    NOME VENDEDOR    qtdVendasAdic   qtdvendas
    000428      ADRIANE LIMA           4          17

    Onde qtdvenda seria o total de vendas do vendedor, incluindo as adicionais. Ai com esse resultado vou poder medir quantos % das vendas houve venda de produtos a mais :)

    José,

    Conseguimos ajustar sua consulta para ser usada via ODBC no Excel?

    Ou como que armazeno ele como uma procedure?

    Obrigado,


    segunda-feira, 15 de maio de 2017 00:52
  • Deleted
    segunda-feira, 15 de maio de 2017 10:51
  • Bom dia,

    Por falta de retorno esta thread esta encerrada !

    Por gentileza, caso necessário abra uma nova thread.

    Atenciosamente,


    Guilherme Macedo S

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    TechNet Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 19 de maio de 2017 19:39