Usuário com melhor resposta
Consulta com COUNT

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!
- Editado Jonathan L Santos segunda-feira, 15 de maio de 2017 01:45 ajuste
Respostas
-
Deleted
- Marcado como Resposta Jonathan L Santos sexta-feira, 26 de maio de 2017 15:41
-
Deleted
- Marcado como Resposta Guilherme Macedo S sexta-feira, 19 de maio de 2017 19:39
Todas as Respostas
-
-
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!
- Editado Jonathan L Santos domingo, 14 de maio de 2017 02:32 Acescimo de informacao
-
-
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!!
-
-
(...) 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!!
-
-
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
- Editado Jonathan L Santos domingo, 14 de maio de 2017 21:58 ajuste de dados
-
Deleted
- Marcado como Resposta Jonathan L Santos sexta-feira, 26 de maio de 2017 15:41
-
(...) 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
-
-
(...) 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
- Editado Jonathan L Santos domingo, 14 de maio de 2017 23:48 correcao
-
-
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 :)
-
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,
- Editado Jonathan L Santos segunda-feira, 15 de maio de 2017 01:57
-
Deleted
- Marcado como Resposta Guilherme Macedo S sexta-feira, 19 de maio de 2017 19:39
-
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.