Fórum Eita Select ruim...de sair!!!!!!!!!!!!!! #187604
09/10/2003
0
na linha em destaque
eu preciso do SUM para agrupar todas os intens da nota
se eu adicionar o SUM ele nao aceita eu acho que seja por causa da linha com substring
Macario
Curtir tópico
+ 0Posts
09/10/2003
Aroldo Zanela
Neste caso, é necessário utilizar o group by para utilizar sum. A propósito, cuidado com a precendência dos operadores aritiméticos.
Gostei + 0
10/10/2003
Macario
o group by funciona sem o uso do SUM mas ai..ele nao soma as notas corretamentes
E teria que ser dessa forma
NF Total
1 60
2 125
SQL.Add(´ sum (N.vlr * N.qte + n.ipi+n.encpro+n.encipi) as Valor´);
alguma solução
Gostei + 0
10/10/2003
Aroldo Zanela
Eu me referia a necessidade de utilizar o group by + a função sum.
Gostei + 0
10/10/2003
Macario
usando substring ai o group by nao funciona pq nao tenho um nome de campo valido, pois ele nao aceita data como nome de campo
Gostei + 0
10/10/2003
Adilsond
with QryTemp do begin Close; DatabaseName := DM.TArqEmpr.DatabaseName; SQL.Clear; SQL.Add(´select C.v1 as Cod,´); SQL.Add(´ C.v2 as Cliente,´); SQL.Add(´ C.v4 as Municipio,´); SQL.Add(´ C.v5 as UF,´); SQL.Add(´ C.v12 as Contato,´); SQL.Add(´ C.v13 as Telefone,´); SQL.Add(´ R.v1 as codrep,´); SQL.Add(´ R.v2 as Representante,´); SQL.Add(´ C.Datacad,´); SQL.Add(´ N.nnf as Nota,´); SQL.Add(´ sum(N.vlr * N.qte + n.ipi + n.encpro + n.encipi) as Valor,´); SQL.Add(´ max(cast(substring(n.dnf from 1 for 2) || ´ + QuotedStr(´/´) + ´|| substring(n.dnf from 4 for 2) || ´ + QuotedStr(´/´) + ´|| substring(n.dnf from 7 for 4) as data)) as Data´); SQL.Add(´from arqclie C,´); SQL.Add(´ arqprnf N,´); SQL.Add(´ arqrepr R´); SQL.Add(´where (C.v1 = N.ncl)´); SQL.Add(´ and (R.v1 = N.nre)´); SQL.Add(´ and (N.nnf = (select max(NF.nnf)´); SQL.Add(´ from arqprnf NF´); SQL.Add(´ where NF.ncl = C.v1 and nf.nre = r.v1))´); SQL.Add(´ and (C.v1 between :cli1 and :cli2)´); SQL.Add(´ and (N.nre between :rep1 and :rep2)´); SQL.Add(´ and (cast(substring(n.dnf from 1 for 2) || ´ + QuotedStr(´/´) + ´|| substring(n.dnf from 4 for 2) || ´ + QuotedStr(´/´) + ´|| substring(n.dnf from 7 for 4) as data) >= :data)´); SQL.Add(´Group by C.v1, C.v2, C.v4, C.v5, C.v12, C.v13, R.v1, R.v2, C.datacad, n.dnf, n.nnf´); 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; Params[4].Value := StrToDate(Copy(mdtDataB.Text,1,2) + ´/´ + Copy(mdtDataB.Text,4,2) + ´/´ + Copy(mdtDataB.Text,7,2)); Open; end;
Gostei + 0
10/10/2003
Macario
agora é o seguinte preciso obter o total de dias entra a ultima nota de cada cliente e o dia base passado como parametro
Gostei + 0
10/10/2003
Macario
mas aparece type mistach expression?
Gostei + 0
10/10/2003
Joilson_gouveia
SQL.Add(´where (C.v1 = N.ncl)´);
SQL.Add(´ and (R.v1 = N.nre)´);
SQL.Add(´ and (N.nnf = (select max(NF.nnf)´);
SQL.Add(´ from arqprnf NF´);
SQL.Add(´ where NF.ncl = C.v1 and nf.nre = r.v1))´);
SQL.Add(´ and (C.v1 between :cli1 and :cli2)´);
SQL.Add(´ and (N.nre between :rep1 and :rep2)´);
SQL.Add(´ and (( (substring (n.dnf from 1 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 4 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 7 for 4)) )- [color=red:16995bf71a]:dia [/color:16995bf71a]>= :inativo)´);
SQL.Add(´Group by C.v1, C.v2, C.v4, C.v5, C.v12, C.v13,R.v1, R.v2, C.datacad, n.nnf , n.dnf´);
SQL.Add(´order by R.v1,´);
SQL.Add(´ C.v1´);
Params[0].Value := mdtCliIni.Text;
Params[1].Value := mdtCliFim.Text;
Params[2].Value := mdtRepIni.Text;
Params[3].Value := mdtRepFim.Text;
[color=red:16995bf71a]Params[4].Value := Copy(mdtDataB.Text,1,2)+´/´+Copy(mdtDataB.Text,4,2)+´/´+Copy(mdtDataB.Text,7,4); [/color:16995bf71a]Params[5].Value := StrToInt(mdtInativo.Text);
Open;
Gostei + 0
10/10/2003
Macario
agora eu preciso obter o numero de dias
entra a data atual e a data da nota fiscal
ele esta dando a mensagem
type mismatch in expression
with QryTemp do
begin
Close;
DatabaseName := DM.TArqEmpr.DatabaseName;
SQL.Clear;
SQL.Add(´select C.v1 as Cod,´);
SQL.Add(´ C.v2 as Cliente,´);
SQL.Add(´ C.v4 as Municipio,´);
SQL.Add(´ C.v5 as UF,´);
SQL.Add(´ C.v12 as Contato,´);
SQL.Add(´ C.v13 as Telefone,´);
SQL.Add(´ R.v1 as codrep,´);
SQL.Add(´ R.v2 as Representante,´);
SQL.Add(´ C.Datacad,´);
SQL.Add(´ N.nnf as Nota,´);
SQL.Add(´ N.dnf as data,´);
SQL.Add(´ sum (N.vlr * N.qte + n.ipi+n.encpro+n.encipi) as Valor,´);
SQL.Add(´ max( (substring (n.dnf from 1 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 4 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 7 for 4)) ) as data´);
SQL.Add(´from arqclie C,´);
SQL.Add(´ arqprnf N,´);
SQL.Add(´ arqrepr R´);
SQL.Add(´where (C.v1 = N.ncl)´);
SQL.Add(´ and (R.v1 = N.nre)´);
SQL.Add(´ and (N.nnf = (select max(NF.nnf)´);
SQL.Add(´ from arqprnf NF´);
SQL.Add(´ where NF.ncl = C.v1 and nf.nre = r.v1))´);
SQL.Add(´ and (C.v1 between :cli1 and :cli2)´);
SQL.Add(´ and (N.nre between :rep1 and :rep2)´);
SQL.Add(´ and (:dia - (cast( (substring (n.dnf from 1 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 4 for 2)) +´´/´´+´);
SQL.Add(´ (substring (n.dnf from 7 for 4)) as date))) >= :inativo´);
SQL.Add(´Group by C.v1, C.v2, C.v4, C.v5, C.v12, C.v13,R.v1, R.v2, C.datacad, n.nnf , n.dnf´);
SQL.Add(´order by R.v1,´);
SQL.Add(´ C.v1´);
Params[0].Value := mdtCliIni.Text;
Params[1].Value := mdtCliFim.Text;
Params[2].Value := mdtRepIni.Text;
Params[3].Value := mdtRepFim.Text;
Params[4].Value := hoje;
Params[5].Value := StrToInt(mdtInativo.Text);
Open;
end;
Gostei + 0
10/10/2003
Joilson_gouveia
Altere a Linha acima para
Params[4].Value := [b:42cc1e5891]DateToStr(hoje);[/b:42cc1e5891]
Gostei + 0
10/10/2003
Adilsond
1 - Altere SQL.Add(´ (substring (n.dnf from 7 for 4)) as date))) >= :inativo´); para
SQL.Add(´ (substring (n.dnf from 7 for 4)) as date)) >= :inativo)´);
2 - Coloque o seguinte comando:
Params[5].Value := StrToInt(mdtInativo.Text);
SQL.SaveToFile(´C:\MinhaQuery.txt´);
Open;
Depois abra o arquivo gerado e verifique como ficou sua query, inclusive voce pode executa-la no DBExplorer para verificar possíveis erros.
Té+
Gostei + 0
10/10/2003
Macario
Gostei + 0
10/10/2003
Adilsond
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)