Select falta pouco.....
Bom dia colegas
Vejam só estou precisando criar um relatorio de clientes inativos.
as tabelas são as seguintes
clientes
representantes
notafiscal
produto_NF
eu preciso mostrar os seguintes campos
Codcli Nomecli CodRepre NomeRepre Nº Nota Valor Nota Data Nota
sendo que para compor o campo valor da nota uso os campos QTE , VLR e IPI da tabela produto_NF, agora vcs sabem que nessa tabela tenho varios registros referente a mesma nota.
com o select abaixo ele me retorna todas as notas somadas cada uma corretamente
mas como disse eu preciso que seje apenas a ultima nota de cada cliente por representante
com esse outro select ele me retorna apenas a ultima nota mas ele soma o valor de todas, e [b:5df3a293a1]esse esta sendo o meu problema[/b:5df3a293a1]
alguem poderia me auxiliar nisso
P.s: depois viram outras perguntas
Grato pela atenção
Vejam só estou precisando criar um relatorio de clientes inativos.
as tabelas são as seguintes
clientes
representantes
notafiscal
produto_NF
eu preciso mostrar os seguintes campos
Codcli Nomecli CodRepre NomeRepre Nº Nota Valor Nota Data Nota
sendo que para compor o campo valor da nota uso os campos QTE , VLR e IPI da tabela produto_NF, agora vcs sabem que nessa tabela tenho varios registros referente a mesma nota.
com o select abaixo ele me retorna todas as notas somadas cada uma corretamente
with QryTemp do
begin
Close;
DatabaseName := DM.TArqEmpr.DatabaseName;
SQL.Clear;
SQL.Add(´select´);
SQL.Add(´C.v1 as Cod, C.v2 as Cliente,´);
SQL.Add(´ R.v1 as codrep,R.v2 as Representante,´);
SQL.Add(´N.Dnf as Data, N.nnf as Nota, sum (N.vlr * N.qte+ n.ipi) as Valor´);
SQL.Add(´from arqclie C, arqprnf N, arqrepr R´);
SQL.Add(´Where (C.v1 = N.ncl) and (N.nre = R.v1) and (N.nnf = N.nnf) and´);
SQL.Add(´(c.v1 between :cli1 and :cli2) and´);
SQL.Add(´(n.nre between :rep1 and :rep2)´);
SQL.Add(´Group by C.v1, C.v2,R.v1, R.v2, n.dnf, n.nnf´);
SQL.Add(´order by R.v1,C.v1, n.nnf´);
Params[0].Value := mdtCliIni.Text;
Params[1].Value := mdtCliFim.Text;
Params[2].Value := mdtRepIni.Text;
Params[3].Value := mdtRepFim.Text;
Open;
end;
mas como disse eu preciso que seje apenas a ultima nota de cada cliente por representante
com esse outro select ele me retorna apenas a ultima nota mas ele soma o valor de todas, e [b:5df3a293a1]esse esta sendo o meu problema[/b:5df3a293a1]
with QryTemp do
begin
Close;
DatabaseName := DM.TArqEmpr.DatabaseName;
SQL.Clear;
SQL.Add(´select´);
SQL.Add(´C.v1 as Cod, C.v2 as Cliente,´);
SQL.Add(´ R.v1 as codrep,R.v2 as Representante,´);
SQL.Add(´Max (N.Dnf) as Data, Max (N.nnf) as Nota, sum (N.vlr * N.qte+ n.ipi) as Valor´);
SQL.Add(´from arqclie C, arqprnf N, arqrepr R´);
SQL.Add(´Where (C.v1 = N.ncl) and (N.nre = R.v1) and (N.nnf = N.nnf) and´);
SQL.Add(´(c.v1 between :cli1 and :cli2) and´);
SQL.Add(´(n.nre between :rep1 and :rep2)´);
SQL.Add(´Group by C.v1, C.v2,R.v1, R.v2´);
SQL.Add(´order by R.v1,C.v1´);
Params[0].Value := mdtCliIni.Text;
Params[1].Value := mdtCliFim.Text;
Params[2].Value := mdtRepIni.Text;
Params[3].Value := mdtRepFim.Text;
Open;
end;
alguem poderia me auxiliar nisso
P.s: depois viram outras perguntas
Grato pela atenção
Macario
Curtidas 0
Respostas
Macario
07/10/2003
Colegas será que nao fui um claro nessa minha pergunta?
GOSTEI 0
Joilson_gouveia
07/10/2003
Veja se seu banco de dados suporta esse select:
with QryTemp do
begin
Close;
DatabaseName := DM.TArqEmpr.DatabaseName;
SQL.Clear;
SQL.Add(´Select´);
SQL.Add(´A.Cod,A.Cliente,A.CodRep,A.Representante,Max(A.Data),A.Nota,A.Valor´);
SQL.Add(´ from (select´);
SQL.Add(´C.v1 as Cod, C.v2 as Cliente,´);
SQL.Add(´ R.v1 as codrep,R.v2 as Representante,´);
SQL.Add(´N.Dnf as Data, N.nnf as Nota, sum (N.vlr * N.qte+ n.ipi) as Valor´);
SQL.Add(´from arqclie C, arqprnf N, arqrepr R´);
SQL.Add(´Where (C.v1 = N.ncl) and (N.nre = R.v1) and (N.nnf = N.nnf) and´);
SQL.Add(´(c.v1 between :cli1 and :cli2) and´);
SQL.Add(´(n.nre between :rep1 and :rep2)´);
SQL.Add(´Group by C.v1, C.v2,R.v1, R.v2, n.dnf, n.nnf) A´);
SQL.Add(´Group by A.Cod,A.Cliente,A.CodRep,A.Representante,A.Nota,A.Valor´);
SQL.Add(´order by A.CodRep,A.Cod,A.Nota´);
Params[0].Value := mdtCliIni.Text;
Params[1].Value := mdtCliFim.Text;
Params[2].Value := mdtRepIni.Text;
Params[3].Value := mdtRepFim.Text;
Open;
end;
with QryTemp do
begin
Close;
DatabaseName := DM.TArqEmpr.DatabaseName;
SQL.Clear;
SQL.Add(´Select´);
SQL.Add(´A.Cod,A.Cliente,A.CodRep,A.Representante,Max(A.Data),A.Nota,A.Valor´);
SQL.Add(´ from (select´);
SQL.Add(´C.v1 as Cod, C.v2 as Cliente,´);
SQL.Add(´ R.v1 as codrep,R.v2 as Representante,´);
SQL.Add(´N.Dnf as Data, N.nnf as Nota, sum (N.vlr * N.qte+ n.ipi) as Valor´);
SQL.Add(´from arqclie C, arqprnf N, arqrepr R´);
SQL.Add(´Where (C.v1 = N.ncl) and (N.nre = R.v1) and (N.nnf = N.nnf) and´);
SQL.Add(´(c.v1 between :cli1 and :cli2) and´);
SQL.Add(´(n.nre between :rep1 and :rep2)´);
SQL.Add(´Group by C.v1, C.v2,R.v1, R.v2, n.dnf, n.nnf) A´);
SQL.Add(´Group by A.Cod,A.Cliente,A.CodRep,A.Representante,A.Nota,A.Valor´);
SQL.Add(´order by A.CodRep,A.Cod,A.Nota´);
Params[0].Value := mdtCliIni.Text;
Params[1].Value := mdtCliFim.Text;
Params[2].Value := mdtRepIni.Text;
Params[3].Value := mdtRepFim.Text;
Open;
end;
GOSTEI 0
Macario
07/10/2003
nao deu certo joilson ele acusa erro no segundo select
invalid use of keyword token: select c.v1
GOSTEI 0
Marcelo.c
07/10/2003
Não seria C.v1, com C maiúsculo ?
GOSTEI 0
Macario
07/10/2003
Não seria C.v1, com C maiúsculo ?
nao é isso
GOSTEI 0