Jump to content
Fivewin Brasil

Ajuda com comando SQL


Jmsilva

Recommended Posts

Tenho um banco com as tabelas "clientes" e "NF", preciso de vetor(resultado) que tenha
o código do cliente, nome, última data que foi emitido nf, cálculo dos dias em relação a última nota fiscal.
Alguém tem alguma sugestão de um  único comando sql para resolver isso.
Clientes->cod e nome
NF->cod,nfe e dtanfe

JMSIVA

 

 

Link to comment
Share on other sites

Boa tarde amigo.

Tenta assim:

SELECT DISTINCT Clientes.cod, Clientes.nome, NF.nfe, max(NF.dtanfe) from Clientes INNER JOIN NF
ON Clientes.cod = NF.codigoDoCliente ORDER BY Clientes.cod;

 

Na cláusula ON : Substituir pelos campos de relacionamento das suas tabelas.

Na cláusula ORDER BY: Substituir pelo campo que queira ordenar.

Abraço.

 

 

Link to comment
Share on other sites

  • 4 months later...

Olá, o comando sql funcionou, mas preciso fazer uma lista com todos os clientes com ou sem nfe, para aqueles que tem NF trazer a última data max(NF.dtanfe) .

No exemplo trouxe apenas os cliente com nfe.

Aproveitando, dentro da nfe tem campo tipo que pode ser 1 ou 2, preciso saber da ultima data para cada tipo, é possível fazer em um unico cmd sql.

SELECT DISTINCT Clientes.cod, Clientes.nome, NF.nfe, max(NF.dtanfe) from Clientes INNER JOIN NF
ON Clientes.cod = NF.codigoDoCliente ORDER BY Clientes.cod;

com left join trás todos os clientes, mas com função max() , não funcionou

SELECT DISTINCT Clientes.cod, Clientes.nome, NF.nfe, max(NF.dtanfe) from Clientes LEFT JOIN NF
ON Clientes.cod = NF.codigoDoCliente ORDER BY Clientes.cod;

 

 

Link to comment
Share on other sites

Edu,

Assim funcionou, tá meio estranho!  mas é só para teste, considere-se a ideia de duas tabelas uma de clientes outra de nota fiscal.

SELECT DISTINCT Clientes.prec_cp, Clientes.nick, NF.dtaserv from cadetes as Clientes LEFT JOIN escala_normal as nf
ON Clientes.prec_cp = nf.prec_cp1 group by clientes.prec_cp;

O problema que a tabela NF possui um campo TIPO (1 OU 2), DTASERV e ID do cliente (prec_cp1), preciso que o comando SQL retorne
duas datas a última data para o tipo=1 e a outra para o tipo=2, se não exstir não tem problema, tem que retornar a data em branco, pq preciso de todos os clientes com ou sem data.
estou pesquisando e fazendo testes.....se tiver alguma sugestão agradeço.

SELECT DISTINCT Clientes.prec_cp, Clientes.nick, NF.dtaserv as dtaTipo1, NF.dtaserv as dtaTipo2  from .....

Pesquisando algo assim...

Link to comment
Share on other sites

Edu,

os comandos abaixo fazem o que preciso, porém vou ter executar separadamente e juntar depois, tem como um único comando sql:

1) SELECT Clientes.prec_cp, Clientes.nick, Max(NF.dtaserv) as dta1, nf.tipo from cadetes as Clientes LEFT JOIN escala_normal as nf
ON Clientes.prec_cp = nf.prec_cp1 and nf.tipo='1' GROUP BY clientes.prec_cp;

2)SELECT Clientes.prec_cp, Clientes.nick, Max(NF.dtaserv) as dta1, nf.tipo from cadetes as Clientes LEFT JOIN escala_normal as nf
ON Clientes.prec_cp = nf.prec_cp1 and nf.tipo='2' GROUP BY clientes.prec_cp

Link to comment
Share on other sites

João, valeu funciona mas não resolve, preciso de um resultado assim:

Clientes.prec_cp, Clientes.nick, Max(NF.dtaserv) as data1, Max(NF.dtaserv) as data2 ...

sendo que data1 com tipo='1' e data2 com tipo='2', durante o processamento necessita das duas datas para realizar dois cálculos com  date() caso ela exista. 

por ora, vou fazer as duas chamadas e faço junção dos vetores.

 

Link to comment
Share on other sites

JMSilva

 

Coloque a coluna da data 2 como um novo select:

SELECT Clientes.prec_cp, Clientes.nick, Max(NF.dtaserv) as dta1, nf.tipo,
(SELECT Clientes.prec_cp, Clientes.nick, Max(NF.dtaserv) as dta1, nf.tipo from cadetes as Clientes LEFT JOIN escala_normal as nf
ON Clientes.prec_cp = nf.prec_cp1 and nf.tipo='2' GROUP BY clientes.prec_cp) as data2 
from cadetes as Clientes LEFT JOIN escala_normal as nf
ON Clientes.prec_cp = nf.prec_cp1 and nf.tipo='1' GROUP BY clientes.prec_cp;
 

Att

João Bosco

Link to comment
Share on other sites

JOÃO, obrigado, mas não funcionou, mas vou trabalhar no seu post, ele não reconheceu o segundo select, eu me lembro da faculdade de fazer a chamada select dentro de outro.

O comando abaixo quase funcionou, o problema que tabela cadetes tem idturma, que diferencia o grupo de pessoas, no caso exemplo abaixo ele faz o que preciso, mas traz todos os registro sem levar em conta o filtro dos cadetes (clientes).

SELECT c.prec_cp, c.numero, c.nick, c.uf, max(e.dtaserv),count(id)  FROM cadetes AS c LEFT JOIN escala_normal AS e ON c.idturma=2017 and c.prec_cp=e.prec_cp1 and e.tipo='1' GROUP BY c.prec_cp;

PQ NÃO FAZ FILTRO SO DOS CLIENTES COM IDTURMA=2017 ?

Resolvido:

SELECT c.prec_cp, c.numero, c.nick, c.idturma, e.tipo,max(e.dtaserv), count(e.id)   FROM cadetes AS c LEFT JOIN escala_normal AS e ON c.prec_cp=e.prec_cp1 and e.tipo='1' where idturma = 2017 group by c.prec_cp;

quanto ao segunda data foço inner join e junto for next

obrigado!

 

 

 

 

Link to comment
Share on other sites

Olá,

Crie uma tabela temporária com uma informação e faça join com a outra:

 

create TEMPORARY table temp01
SELECT Clientes.prec_cp, Clientes.nick, Max(NF.dtaserv) as dta1, nf.tipo from cadetes as Clientes LEFT JOIN escala_normal as nf
ON Clientes.prec_cp = nf.prec_cp1 and nf.tipo='1' GROUP BY clientes.prec_cp;

create TEMPORARY table temp02
SELECT Clientes.prec_cp, Clientes.nick, Max(NF.dtaserv) as dta1, nf.tipo from cadetes as Clientes LEFT JOIN escala_normal as nf
ON Clientes.prec_cp = nf.prec_cp1 and nf.tipo='2' GROUP BY clientes.prec_cp;

create index temp01 ON temp01 (nick);
create index temp02 ON temp02 (nick);

SELECT t1.prec_cp, t1.nick, t1.dta1, t2.dta2, t1.tipo from temp01 as t1
left join temp02 as t2 on t1.nick=t2.nick;

 

Link to comment
Share on other sites

 

Boa tarde amigo.

Tenta assim:

SELECT DISTINCT Clientes.cod, Clientes.nome, NF.nfe, max(NF.dtanfe) from Clientes INNER JOIN NF
ON Clientes.cod = NF.codigoDoCliente ORDER BY Clientes.cod;

 

Na cláusula ON : Substituir pelos campos de relacionamento das suas tabelas.

Na cláusula ORDER BY: Substituir pelo campo que queira ordenar.

Abraço.

 

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...