- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ajuda montar consulta SQL
×
Linguagem de Programação ADVPL
Perguntas Ajuda montar consulta SQL
- dexter
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 78
- Obrigados Recebidos: 0
10 anos 9 meses atrás - 10 anos 9 meses atrás #20991
por dexter
Ajuda montar consulta SQL foi criado por dexter
Boa tarde,
Alguém pode me ajudar na montagem de uma consulta,
Preciso listar os clientes que NÃO compraram de uma certa data pra trás.
Estou tentando assim pela data de emissão mas não
sei se tem que considerar mais tabelas ou campos.
Alguém pode me ajudar na montagem de uma consulta,
Preciso listar os clientes que NÃO compraram de uma certa data pra trás.
Estou tentando assim pela data de emissão mas não
sei se tem que considerar mais tabelas ou campos.
SELECT * FROM SF2010
WHERE F2_EMISSAO > '20050324'
GROUP BY F2_EMISSAO
Ultima edição: 10 anos 9 meses atrás por dexter.
Por favor Acessar ou Registrar para participar da conversa.
- Gui_Nasc
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 4
- Obrigados Recebidos: 0
10 anos 9 meses atrás #20998
por Gui_Nasc
Respondido por Gui_Nasc no tópico Ajuda montar consulta SQL
O que você esta fazendo esta certo,
vai trazer todas as notas com Data superior a informada.
O que você pode fazer ja que o que vc quer é apenas os clientes, é mudar o SELECT, de uma forma q ele n repita informação:
SELECT DISTINCT F2_CLIENTE FROM SF2010
assim ele vai trazer o codigo de todos os clientes, sem repetir o mesmo codigo, facilitando para vc listar depois
o que vc tbm pode fazer é um INNER JOIN, par aja buscar as informações do Cliente na SA1
vai trazer todas as notas com Data superior a informada.
O que você pode fazer ja que o que vc quer é apenas os clientes, é mudar o SELECT, de uma forma q ele n repita informação:
SELECT DISTINCT F2_CLIENTE FROM SF2010
assim ele vai trazer o codigo de todos os clientes, sem repetir o mesmo codigo, facilitando para vc listar depois
o que vc tbm pode fazer é um INNER JOIN, par aja buscar as informações do Cliente na SA1
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
10 anos 9 meses atrás #20999
por kanaamlrr
Respondido por kanaamlrr no tópico Ajuda montar consulta SQL
Bom dia dexter.
Acho que é isso que você precisa:
poderia ser feito com um left join também, acho que ficaria mais performático.
Abraço!
Acho que é isso que você precisa:
SELECT A1_COD, A1_NOME, A1_END, A1_CGC FROM SA1010
WHERE D_E_L_E_T_ <> '*' AND A1_FILIAL = '01' AND
A1_COD NOT IN (SELECT F2_CLIENTE FROM SF2010 WHERE D_E_L_E_T_ <> '*' AND F2_FILIAL = '01' AND F2_EMISSAO >= '20050324' GROUP BY F2_CLIENTE)
poderia ser feito com um left join também, acho que ficaria mais performático.
Abraço!
Por favor Acessar ou Registrar para participar da conversa.
- dexter
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 78
- Obrigados Recebidos: 0
10 anos 9 meses atrás #21046
por dexter
Respondido por dexter no tópico Ajuda montar consulta SQL
Obrigado amigos que responderam.
Guilherme eu estava meio doido aqui e não reparei no código que
coloquei ai com "group by".
Mas vc falando me veio uma dúvida quanto a usar o "distinct" porque se não me
engano um cliente pode ter o mesmo código mas para lojas diferentes então se eu
pego um cliente tenho que pegar todas suas lojas, mas não tenho certeza ainda.
Sobre a SA1 ou outras tabelas que também que estou queria saber se aqui é
a forma correta de pegar os clientes que NÃO compraram de uma certa data.
Kanaãm
Tudo bom,
Não sei ainda porque a sua consulta não me retornou nada no meu banco aqui.
Se eu pegar os clientes usando o campo emissão da F2 acredito que eu consigo listar
os clientes que compraram depois desta data, mas eu preciso pegar os que NÃO compraram, então complicou
E também acredito que não vai ser confiável porque se eu pego antes ou depois o cliente pode ter nota antes de depois.
Solução:
Depois de muito pesquisar e agradeço a ajuda de vcs do forum eu encontrei algo
que poderia ser mais favoravel.
Na SA1 tem um campo chamado A1_ULTCOM que é justamente a referência para isto que
preciso, identificar a última compra do cliente. ahahahaahah bom demais né.
Mas analisando os cadastros dos clientes achei uma pequena particularidade que
poderia trazer problemas na consulta, pois em alguns clientes poderia ocorrer
deste campo estar VAZIO caso de clientes novos.
Fiz assim:
Obrigado pela ajuda de todos.
Guilherme eu estava meio doido aqui e não reparei no código que
coloquei ai com "group by".
Mas vc falando me veio uma dúvida quanto a usar o "distinct" porque se não me
engano um cliente pode ter o mesmo código mas para lojas diferentes então se eu
pego um cliente tenho que pegar todas suas lojas, mas não tenho certeza ainda.
Sobre a SA1 ou outras tabelas que também que estou queria saber se aqui é
a forma correta de pegar os clientes que NÃO compraram de uma certa data.
Kanaãm
Tudo bom,
Não sei ainda porque a sua consulta não me retornou nada no meu banco aqui.
Se eu pegar os clientes usando o campo emissão da F2 acredito que eu consigo listar
os clientes que compraram depois desta data, mas eu preciso pegar os que NÃO compraram, então complicou
E também acredito que não vai ser confiável porque se eu pego antes ou depois o cliente pode ter nota antes de depois.
Solução:
Depois de muito pesquisar e agradeço a ajuda de vcs do forum eu encontrei algo
que poderia ser mais favoravel.
Na SA1 tem um campo chamado A1_ULTCOM que é justamente a referência para isto que
preciso, identificar a última compra do cliente. ahahahaahah bom demais né.
Mas analisando os cadastros dos clientes achei uma pequena particularidade que
poderia trazer problemas na consulta, pois em alguns clientes poderia ocorrer
deste campo estar VAZIO caso de clientes novos.
Fiz assim:
SELECT count(*) FROM sa1010 sa1
WHERE
sa1.a1_ultcom < '20050101' -- data de ultima compra
AND sa1.a1_msblql = '2' -- nao bloqueado
AND sa1.d_e_l_e_t_ <> '*' -- nao deletado
Obrigado pela ajuda de todos.
Por favor Acessar ou Registrar para participar da conversa.
- Gui_Nasc
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 4
- Obrigados Recebidos: 0
10 anos 9 meses atrás - 10 anos 9 meses atrás #21076
por Gui_Nasc
Respondido por Gui_Nasc no tópico Ajuda montar consulta SQL
Rsrs tinha esquecido deste Campo.
bom então resolve seu problema
agora para tirar os Clientes novos do relatório
coloque agora no WHERE um A1_ULTCOM <> " / / " ou caso queira que esse Clientes apareçam um A1_ULTCOM = " / / " e pronto ^^
Sobre o DISTINCT, se vocÊ quiser que ele lite todas as lojas do Cliente tera que colocar o campo loja no SELECT tbm, ai depende do por que vc vai querer esses Dados , se vai ser necessário ou não listar todas as lojas do Cliente
bom então resolve seu problema
agora para tirar os Clientes novos do relatório
coloque agora no WHERE um A1_ULTCOM <> " / / " ou caso queira que esse Clientes apareçam um A1_ULTCOM = " / / " e pronto ^^
Sobre o DISTINCT, se vocÊ quiser que ele lite todas as lojas do Cliente tera que colocar o campo loja no SELECT tbm, ai depende do por que vc vai querer esses Dados , se vai ser necessário ou não listar todas as lojas do Cliente
Ultima edição: 10 anos 9 meses atrás por Gui_Nasc.
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
10 anos 9 meses atrás #21077
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Respondido por lalberto no tópico Ajuda montar consulta SQL
Guilherme obrigado pela ajuda, só lembrando não existe A1_ULTCOM = ' / / ' ok,
utilize apenas assim:
Where A1_ULTCOM <> '' ou A1_ULTCOM = ''
Abraços.
utilize apenas assim:
Where A1_ULTCOM <> '' ou A1_ULTCOM = ''
Abraços.
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ajuda montar consulta SQL
Tempo para a criação da página:0.147 segundos