Fórum SELECT SUM #57392
06/12/2006
0
para iniciar, tenhu uma dúvida sobre o SUM com o C++ Builder 6...
AnsiString DE = MaskEdit1->Text;
AnsiString ATE = MaskEdit2->Text;
if(RBTODAS->Checked == true){
DataModule1->IBQueryLocaliza5952->Close();
DataModule1->IBQueryLocaliza5952->SQL->Clear();
DataModule1->IBQueryLocaliza5952->SQL->Text = "SELECT * FROM DARF5952 WHERE DATA >= :DE AND DATA <= :ATE";
DataModule1->IBQueryLocaliza5952->ParamByName("DE")->AsDateTime =(MaskEdit1->Text);
DataModule1->IBQueryLocaliza5952->ParamByName("ATE")->AsDateTime = (MaskEdit2->Text);
DataModule1->IBQueryLocaliza5952->Active = true;
DataModule1->IBQueryLocaliza5952->Open();
}
if(RBSOMA->Checked == true){
DataModule1->IBQueryPrinc5952->Close();
DataModule1->IBQueryPrinc5952->SQL->Clear();
DataModule1->IBQueryPrinc5952->SQL->Text = "SELECT //NOMETELEFONE, SUM(VALORPRINCIPAL)FROM DARF5952 WHERE DATA >= :DE AND DATA <= :ATE GROUP BY NOMETELEFONE";
DataModule1->IBQueryLocaliza5952->SQL->Text = "SELECT NOMETELEFONE, REF, PERIODOAP, NUMEROCGC, CODRECEITA, NUMEROREF, DATAVENC, VENCIMENTO, PRINCIPAL, VALORPRINCIPAL, VALORMULTA, VALORJUROS, VALORTOTAL, DARF5952VALOR, DATA, SUM(VALORPRINCIPAL)FROM DARF5952 WHERE DATA >= :DE AND DATA <= :ATE GROUP BY NOMETELEFONE";
DataModule1->IBQueryPrinc5952->ParamByName("DE")->AsDateTime =(MaskEdit1->Text);
DataModule1->IBQueryPrinc5952->ParamByName("ATE")->AsDateTime = (MaskEdit2->Text);
DataModule1->IBQueryPrinc5952->Active = true;
DataModule1->IBQueryPrinc5952->Open();
}
}Bom, na linha comentada o código funciona, pois seleciona apenas o NOMETELEFONE e mostra a soma, mas como ficaria para mostrar todos os campos?? coloquei separando por virgula só que não deu...
(qlq código eim delphi será bem aceito...)
obrigado..[b:4ca0700dcb][]´s[/b:4ca0700dcb]
Rostery
Curtir tópico
+ 0Posts
06/12/2006
Emerson Nascimento
Gostei + 0
06/12/2006
Rostery
campos, mas não calcula, mostra todos como se eu estivesse fazendo
um select sem o sum do group by....
=(
Gostei + 0
06/12/2006
Emerson Nascimento
para solucionar isso, use campos agregados.
Gostei + 0
06/12/2006
Rostery
como assim??
Gostei + 0
06/12/2006
Emerson Nascimento
AVG(VALORMULTA) MEDIAMULTA, AVG(VALORJUROS) MEDIAJUROS, SUM(VALORTOTAL) VALORTOTAL,
SUM(DARF5952VALOR) DARF5952VALOR
FROM DARF5952
WHERE DATA >= :DE AND DATA <= :ATE
GROUP BY NOMETELEFONE, NUMEROCGC
Gostei + 0
07/12/2006
Rostery
li no google q é uma média...é isso msm??
queria saber, qual a parte desse código que vc me passou que adiciona o resto dos campos...[/i:4c2df68892]
[i:4c2df68892]Falow cara...brigadão msm..[/i:4c2df68892]
Gostei + 0
11/12/2006
Rostery
[b:b4d9ae01da]SELECT:[/b:b4d9ae01da]
´
SELECT NOMETELEFONE, SUM(VALORPRINCIPAL) VALORPRINCIPALTOTAL, AVG(VALORMULTA) VALORMULTA, AVG(VALORJUROS) VALORJUROS, SUM(VALORTOTAL) VALORTOTAL, SUM(DARF5952VALOR) DARF5952VALOR FROM DARF5952 WHERE DATA >= :DE AND DATA <= :ATE GROUP BY NOMETELEFONE";
[i:b4d9ae01da]ele pega os de msm nome e agrupa..
porém, esses de msm nome, são notas, cada uma com seu numero, depois que eu agrupar as de msm nome, como faço para inserir em um campo, o numero das notas..[/i:b4d9ae01da]
[b:b4d9ae01da]Ex.:[/b:b4d9ae01da]
[i:b4d9ae01da]Se agrupasse 4 notas de msm nome, tenho q mostrar o numero de cada uma que foi agrupada..
|Campo Notas|
001, 002, 007, 010[/i:b4d9ae01da]
Gostei + 0
11/12/2006
Emerson Nascimento
Gostei + 0
11/12/2006
Rostery
mas eu num sei o que e isso q vc falou...
:(
se puder me dar um exemplo..
ou uma dica..
obrigado..
Gostei + 0
12/12/2006
Emerson Nascimento
CREATE PROCEDURE DARF5952_CLI ( de date, ate date) returns ( nometelefone varchar(50), valorprincipal float, mediamulta float, mediajuros float, valortotal float, darf5952valor float, notasfiscais varchar(150)) as declare variable data date; declare variable numeroref varchar(10); begin for select NOMETELEFONE, sum(VALORPRINCIPAL) VALORPRINCIPAL, avg(VALORMULTA) MEDIAMULTA, avg(VALORJUROS) MEDIAJUROS, sum(VALORTOTAL) VALORTOTAL, sum(DARF5952VALOR) DARF5952VALOR from DARF5952 where DATA between :DE and :ATE group by NOMETELEFONE into :NOMETELEFONE, :VALORPRINCIPAL, :MEDIAMULTA, :MEDIAJUROS, :VALORTOTAL, :DARF5952VALOR do begin NOTASFISCAIS = ´´; for select NUMEROREF from DARF5952 where DATA between :DE and :ATE and NOMETELEFONE = :NOMETELEFONE into :NUMEROREF do begin if (:NOTASFISCAIS <> ´´) then NOTASFISCAIS = NOTASFISCAIS || ´, ´; NOTASFISCAIS = NOTASFISCAIS || :NUMEROREF; end suspend; end end
para executar use:
[b:5c5d3e2b2a]EXECUTE PROCEDURE DARF5952_CLI(´01.01.2006´, ´31.12.2006´)[/b:5c5d3e2b2a]
ou
[b:5c5d3e2b2a]SELECT * FROM DARF5952_CLI(´01.01.2006´, ´31.12.2006´)[/b:5c5d3e2b2a]
Gostei + 0
12/12/2006
Rostery
flw..brigado msm..[/i:65de5b4fff][b:65de5b4fff][]´s[/b:65de5b4fff]
Gostei + 0
12/12/2006
Emerson Nascimento
para executar:
if(RBSOMA->Checked){
DataModule1->IBQueryPrinc5952->Close();
DataModule1->IBQueryPrinc5952->SQL->Text = "SELECT * FROM DARF5952_CLI( :DE, :ATE )";
DataModule1->IBQueryPrinc5952->ParamByName("DE")->AsDateTime =(MaskEdit1->Text);
DataModule1->IBQueryPrinc5952->ParamByName("ATE")->AsDateTime = (MaskEdit2->Text);
DataModule1->IBQueryPrinc5952->Open();
}Gostei + 0
13/12/2006
Rostery
putz....vou estudar isso, agora sei que é só criar ele no IBCONSOLE neh, e chamar no meu prog...nossa...valew...eu nunca usei esse stored..vou procurar aki blz??
obrigado pela ajuda..espero que de certo... =)
flw..[/i:d06b71255b][b:d06b71255b][]´s[/b:d06b71255b]
Gostei + 0
13/12/2006
Rostery
CREATE PROCEDURE DARF5952 ( DE date, ATE date ) returns( NOMETELEFONE varchar(50), VALORPRINCIPAL float, MEDIAMULTA float, MEDIAJUROS float, VALORTOTAL float, DARF5952VALOR float, NOTASFISCAIS varchar(150)) as declare variable DATA date; declare variable NUMEROREF varchar(10); begin for select NOMETELEFONE, sum(VALORPRINCIPAL) VALORPRINCIPAL, avg(VALORMULTA) MEDIAMULTA, avg(VALORJUROS) MEDIAJUROS, sum(VALORTOTAL) VALORTOTAL, sum(DARF5952VALOR) DARF5952VALOR from DARF5952 where DATA between :DE and :ATE group by NOMETELEFONE into :NOMETELEFONE, :VALORPRINCIPAL, :MEDIAMULTA, :MEDIAJUROS, :VALORTOTAL, :DARF5952VALOR do begin NOTASFISCAIS = ´´; for select REF from DARF5952 where DATA between :DE and :ATE and NOMETELEFONE = :NOMETELEFONE into :NUMEROREF do begin if (:NOTASFISCAIS <> ´´) then NOTASFISCAIS = NOTASFISCAIS || ´, ´; NOTASFISCAIS = NOTASFISCAIS || :NUMEROREF; end suspend; end end
[b:02fc0e988f]o ERRO:[/b:02fc0e988f]
[i:02fc0e988f]tentei mudar esses end´s de lugar, e comparei com um exemplo da internet, mas não consigui arrumar naum...
:(
q q é??[/i:02fc0e988f]
Gostei + 0
13/12/2006
Emerson Nascimento
DARF5952 já é o nome da tabela. não pode ser o nome da stored procedure!
SET TERM ^ ; CREATE PROCEDURE SP_DARF5952 ( de date, ate date) returns ( nometelefone varchar(50), valorprincipal float, mediamulta float, mediajuros float, valortotal float, darf5952valor float, notasfiscais varchar(150)) as declare variable data date; declare variable numeroref varchar(10); begin for select NOMETELEFONE, sum(VALORPRINCIPAL) VALORPRINCIPAL, avg(VALORMULTA) MEDIAMULTA, avg(VALORJUROS) MEDIAJUROS, sum(VALORTOTAL) VALORTOTAL, sum(DARF5952VALOR) DARF5952VALOR from DARF5952 where DATA between :DE and :ATE group by NOMETELEFONE into :NOMETELEFONE, :VALORPRINCIPAL, :MEDIAMULTA, :MEDIAJUROS, :VALORTOTAL, :DARF5952VALOR do begin NOTASFISCAIS = ´´; for select REF from DARF5952 where DATA between :DE and :ATE and NOMETELEFONE = :NOMETELEFONE into :NUMEROREF do begin if (:NOTASFISCAIS <> ´´) then NOTASFISCAIS = NOTASFISCAIS || ´, ´; NOTASFISCAIS = NOTASFISCAIS || :NUMEROREF; end suspend; end end^ SET TERM ; ^
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)