SELECT SUM
Bom galera, sou participante viciado em foruns e resolvi entrar nesse tb, espero poder ajudar no que souber.
para iniciar, tenhu uma dúvida sobre o SUM com o C++ Builder 6...
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]
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
Curtidas 0
Respostas
Emerson Nascimento
06/12/2006
não sei se entendi direito, mas - no seu caso - para ter mais campos na instrução select você deverá colocá-los na cláusula [i:5adadf5525]group by[/i:5adadf5525], a menos que você use campos agregados com funções.
GOSTEI 0
Rostery
06/12/2006
opa...se eu colocar após o Group by, acontece que ela mostra todos os
campos, mas não calcula, mostra todos como se eu estivesse fazendo
um select sem o sum do group by....
=(
campos, mas não calcula, mostra todos como se eu estivesse fazendo
um select sem o sum do group by....
=(
GOSTEI 0
Emerson Nascimento
06/12/2006
essa é uma característica de 100¬ dos bancos de dados.
para solucionar isso, use campos agregados.
para solucionar isso, use campos agregados.
GOSTEI 0
Rostery
06/12/2006
um exemplo??
como assim??
como assim??
GOSTEI 0
Emerson Nascimento
06/12/2006
SELECT NOMETELEFONE, NUMEROCGC, SUM(VALORPRINCIPAL) VALORPRINCIPALTOTAL,
AVG(VALORMULTA) MEDIAMULTA, AVG(VALORJUROS) MEDIAJUROS, SUM(VALORTOTAL) VALORTOTAL,
SUM(DARF5952VALOR) DARF5952VALOR
FROM DARF5952
WHERE DATA >= :DE AND DATA <= :ATE
GROUP BY NOMETELEFONE, NUMEROCGC
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
Rostery
06/12/2006
[i:4c2df68892]Ele ta calculando errado mas mostrou os campos...eu tava tentando entender esse avg ae...
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]
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
Rostery
06/12/2006
[i:b4d9ae01da]Bom, consigui aki, ta faltando uma coisa q ta mais dificil e não consigui ainda...[/i:b4d9ae01da]
[b:b4d9ae01da]SELECT:[/b:b4d9ae01da]
´
[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]
[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
Emerson Nascimento
06/12/2006
talvez a melhor forma de fazer isso seja com stored procedures...
GOSTEI 0
Rostery
06/12/2006
Nossa cara, vou procurar no google...
mas eu num sei o que e isso q vc falou...
:(
se puder me dar um exemplo..
ou uma dica..
obrigado..
mas eu num sei o que e isso q vc falou...
:(
se puder me dar um exemplo..
ou uma dica..
obrigado..
GOSTEI 0
Emerson Nascimento
06/12/2006
eis um exemplo:
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]
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
Rostery
06/12/2006
[i:65de5b4fff]brigado emerson, agora vou estudar isso ae, passar pro builder, só mais uma coisa, onde no meu programa coloco esse código??
flw..brigado msm..[/i:65de5b4fff][b:65de5b4fff][]´s[/b:65de5b4fff]
flw..brigado msm..[/i:65de5b4fff][b:65de5b4fff][]´s[/b:65de5b4fff]
GOSTEI 0
Emerson Nascimento
06/12/2006
o código deve ser colocado no interbase/firebird. isso é uma script para criar uma stored procedure. no ibexpert deve-se abrir o executor de scripts, colar o código e rodar. a sp deverá ser criada.
para executar:
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
Rostery
06/12/2006
[i:d06b71255b]Cara, esse exemplo que vc me deu faz o que eu preciso neh??
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]
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
Rostery
06/12/2006
[i:02fc0e988f]eu fiz algumas alterações, mas ta dando erro agora... ta assim:(não mudo nd quase...)[/i:02fc0e988f]
[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]
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]
Dynamic SQL Error
SQL error code = -104
Unexpected end of command
[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
Emerson Nascimento
06/12/2006
primeira coisa: [b:137642f9f7]a stored procedure não poderá ter o mesmo nome da tabela[/b:137642f9f7].
DARF5952 já é o nome da tabela. não pode ser o nome da stored procedure!
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
Rostery
06/12/2006
[i:623c059620]Nossa, criou...
cara, vc podi me dizer aonde posso encontrar mais coisas sobre essas procedures ae??
fiquei interessado..parece ser legal somente chamar o código..
:)
ondi eu encontro informações detalhadas sobre??
no google achei bastante e li o site da Borland tb tem..
tem mais algum interessante q vc sabe????
vlw[/i:623c059620][b:623c059620][]´s[/b:623c059620]
cara, vc podi me dizer aonde posso encontrar mais coisas sobre essas procedures ae??
fiquei interessado..parece ser legal somente chamar o código..
:)
ondi eu encontro informações detalhadas sobre??
no google achei bastante e li o site da Borland tb tem..
tem mais algum interessante q vc sabe????
vlw[/i:623c059620][b:623c059620][]´s[/b:623c059620]
GOSTEI 0
Rostery
06/12/2006
bOm, tentei modificar esse procedure ae, mas não sei nada disso msm, e estou com dificuldades...
é o seguinte, analizei bem o que preciso, e tava tentando fazer assim:
eu tenho que mostrar todos os campos da minha tabela DARF5952:
(
´NOMETELEFONE´VARCHAR(50),
´REF´VARCHAR(45),
´PERIODOAP´CHAR(11),
´NUMEROCGC´CHAR(20),
´CODRECEITA´CHAR(10),
´NUMEROREF´CHAR(15),
´DATAVENC´CHAR(11),
´VENCIMENTO´CHAR(11),
´PRINCIPAL´CHAR(5),
´VALORPRINCIPAL´DOUBLE PRECISION,
´VALORMULTA´DOUBLE PRECISION,
´VALORJUROS´DOUBLE PRECISION,
´VALORTOTAL´DOUBLE PRECISION,
´DARF5952VALOR´DOUBLE PRECISION,
´DATA´DATE
)
só que da seguinte maneira, primeiro tenho que calcular o [b:ccd1b1d40c]VALORPRINCIPAL[/b:ccd1b1d40c], agrupando por [b:ccd1b1d40c]NOMETELEFONE[/b:ccd1b1d40c] então ficaria assim neh?
Bom, o que espero disso, é que, faça a soma do [b:ccd1b1d40c]valorprincipal[/b:ccd1b1d40c] entre as datas digitadas que tenham o msm nome, depois guarde o resultado na variavel...
depois disso tenho no meu campo [b:ccd1b1d40c]PRINCIPAL[/b:ccd1b1d40c] da tabela, o seu conteúdo ou pode ser ´OK´ para dizer que esse cadastro é de uma empresa matriz ou nulo quando for apenas revenda, até aí blz..o que tenho que fazer agora então, é agrupar as DARFs de nomes iguais, [b:ccd1b1d40c]INSERIR[/b:ccd1b1d40c] o valor da principal que está guardado na variável, e agrupar as notas que forem referentes aos nomes agrupados...
aí tentei fazer um procedure assim (eu tirei base no que o emerson.en passou):
Bom na linha que tem o SELECT * preciso inserir o numero das notas referentes e o valor que guardei na varial, mas não sei como montar tudo isso para funcionar junto...
consigui exlpicar bem o que preciso??
obrigado..a todos principalmente a [b:ccd1b1d40c]emerson.en[/b:ccd1b1d40c]
[b:ccd1b1d40c][]´s[/b:ccd1b1d40c]
é o seguinte, analizei bem o que preciso, e tava tentando fazer assim:
eu tenho que mostrar todos os campos da minha tabela DARF5952:
(
´NOMETELEFONE´VARCHAR(50),
´REF´VARCHAR(45),
´PERIODOAP´CHAR(11),
´NUMEROCGC´CHAR(20),
´CODRECEITA´CHAR(10),
´NUMEROREF´CHAR(15),
´DATAVENC´CHAR(11),
´VENCIMENTO´CHAR(11),
´PRINCIPAL´CHAR(5),
´VALORPRINCIPAL´DOUBLE PRECISION,
´VALORMULTA´DOUBLE PRECISION,
´VALORJUROS´DOUBLE PRECISION,
´VALORTOTAL´DOUBLE PRECISION,
´DARF5952VALOR´DOUBLE PRECISION,
´DATA´DATE
)
só que da seguinte maneira, primeiro tenho que calcular o [b:ccd1b1d40c]VALORPRINCIPAL[/b:ccd1b1d40c], agrupando por [b:ccd1b1d40c]NOMETELEFONE[/b:ccd1b1d40c] então ficaria assim neh?
SELECT SUM(VALORPRINCIPAL) VALORPRINCIPAL FROM DARF5952 WHERE DATA BETWEEN :DE AND :ATE GROUP BY NOMETELEFONE INTO :VALORPRINCIPAL
Bom, o que espero disso, é que, faça a soma do [b:ccd1b1d40c]valorprincipal[/b:ccd1b1d40c] entre as datas digitadas que tenham o msm nome, depois guarde o resultado na variavel...
depois disso tenho no meu campo [b:ccd1b1d40c]PRINCIPAL[/b:ccd1b1d40c] da tabela, o seu conteúdo ou pode ser ´OK´ para dizer que esse cadastro é de uma empresa matriz ou nulo quando for apenas revenda, até aí blz..o que tenho que fazer agora então, é agrupar as DARFs de nomes iguais, [b:ccd1b1d40c]INSERIR[/b:ccd1b1d40c] o valor da principal que está guardado na variável, e agrupar as notas que forem referentes aos nomes agrupados...
aí tentei fazer um procedure assim (eu tirei base no que o emerson.en passou):
SET TERM ^ ; CREATE PROCEDURE "SP_DARF5952_TESTE" ( "DE" DATE, "ATE" DATE ) RETURNS ( "NOMETELEFONE" VARCHAR(50), "REF" VARCHAR(45), "PERIODOAP" CHAR(11), "DATAVENC" CHAR(11), "PRINCIPAL" CHAR(5), "VALORPRINCIPAL" DOUBLE PRECISION, "DARF5952VALOR" DOUBLE PRECISION, "NOTASFISCAIS" VARCHAR(100) ) AS DECLARE VARIABLE DATA DATE; DECLARE VARIABLE NUMEROREF VARCHAR(10); BEGIN FOR SELECT SUM(VALORPRINCIPAL) VALORPRINCIPAL FROM DARF5952 WHERE DATA BETWEEN :DE AND :ATE GROUP BY NOMETELEFONE INTO :VALORPRINCIPAL DO BEGIN SELECT * FROM DARF5952 WHERE DATA BETWEEN :DE AND :ATE AND PRINCIPAL <>´´ 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 ; ^
Bom na linha que tem o SELECT * preciso inserir o numero das notas referentes e o valor que guardei na varial, mas não sei como montar tudo isso para funcionar junto...
consigui exlpicar bem o que preciso??
obrigado..a todos principalmente a [b:ccd1b1d40c]emerson.en[/b:ccd1b1d40c]
[b:ccd1b1d40c][]´s[/b:ccd1b1d40c]
GOSTEI 0
Emerson Nascimento
06/12/2006
eu não entendi bem o que você deseja. você explicou o por quê do campo PRINCIPAL mas não faz uso dele.
mostre como os registros estão gravados e como você quer a saída dessas informações.
por exemplo...
tendo os registros:
quero que saia assim:
com esse tipo de ilustração fica mais fácil entendermos o que você precisa.
mostre como os registros estão gravados e como você quer a saída dessas informações.
por exemplo...
tendo os registros:
NOMETELEFONE REF PERIODOAP VALORPRINCIPAL VALORMULTA ----------------------------------------------------- emp1 X X 10,00 1,00 emp1 y X 12,00 1,25 emp1 Z X 11,00 0,00 emp1 A X 13,00 0,00 emp1 B X 13,00 0,00 emp2 X X 10,00 0,00 emp2 A X 10,00 1,00 emp3 Z X 15,00 1,00 emp1 H X 11,00 0,00 emp1 K X 10,00 0,00
quero que saia assim:
NOMETELEFONE REF VALORPRINCIPAL TOTALMULTA MEDIAMULTA --------------------------------------------------------------------------- emp1 K, X, Y, Z, A, B, H 80,00 2,25 0,3214 emp2 X, A 20,00 1,00 0,5000 emp3 Z 15,00 1,00 1,0000
com esse tipo de ilustração fica mais fácil entendermos o que você precisa.
GOSTEI 0
Rostery
06/12/2006
Tenho todos esses campos: NOMETELEFONE | REF | PERIODOAP | DATAVENC | PRINCIPAL | VALORPRINCIPAL | DARF5952VALOR | NOTASFISCAIS |
Vou abreviar pra ficar melhor na visualizaçao:
[b:3ac395ed8b]Entrada:[/b:3ac395ed8b]
[b:3ac395ed8b]Saída:[/b:3ac395ed8b]
O que eu tinha falado do PRINCIPAL é que ele pega os campos que tem conteúdo ´OK´ no campo principal ex.:
ele pega a primeira linha para mostrar, referencia com as outras ficando assim:
ficou melhor agora??
[i:3ac395ed8b]flw cara, vlw..[/i:3ac395ed8b]
[b:3ac395ed8b][]´s[/b:3ac395ed8b]
Vou abreviar pra ficar melhor na visualizaçao:
[b:3ac395ed8b]Entrada:[/b:3ac395ed8b]
NFONE | REF | PERIODOAP | DATAVENC | PRINCIPAL | VRPRINCIPAL| =============================================================== emp1 |001 | 01/01/07 | 15/11/06 | OK | 100,00 | emp1 |002 | 02/10/06 | 01/01/09 | | 100,00 | emp1 |003 | 03/10/09 | 02/10/05 | | 100,00 | emp2 |004 | 10/12/07 | 15/11/06 | | 50,00 | emp2 |005 | 12/11/06 | 01/01/09 | | 50,00 | emp2 |006 | 23/10/09 | 02/10/05 | OK | 50,00 | emp3 |007 | 21/12/07 | 19/11/06 | | 10,00 | emp3 |008 | 09/11/01 | 05/01/09 | OK | 10,00 |
[b:3ac395ed8b]Saída:[/b:3ac395ed8b]
NFONE | REF |PERIODOAP | DATAVENC | PRINCIPAL | VRPRINCIPAL| ====================================================================== emp1 |001, 002, 003| 01/01/07 | 15/11/06 | OK | 300,00 | emp2 |004, 005, 006| 23/10/07 | 02/10/05 | OK | 150,00 | emp3 |007, 008 | 09/11/01 | 05/01/09 | OK | 20,00 |
O que eu tinha falado do PRINCIPAL é que ele pega os campos que tem conteúdo ´OK´ no campo principal ex.:
NOMEFONE | REF | PERIODOAP | DATAVENC | PRINCIPAL | VRPRINCIPAL| ============================================================== emp1 |001 | 01/01/07 | 15/11/06 | OK | 100,00 | emp1 |002 | 02/10/06 | 01/01/09 | | 100,00 | emp1 |003 | 03/10/09 | 02/10/05 | | 100,00 |
ele pega a primeira linha para mostrar, referencia com as outras ficando assim:
NFONE | REF | PERIODOAP | DATAVENC | PRINCIPAL | VRPRINCIPAL| =============================================================== emp1 |[b]001, 002, 003[/b]| 01/01/07 | 15/11/06 | OK | [b]300,00[/b] |
ficou melhor agora??
[i:3ac395ed8b]flw cara, vlw..[/i:3ac395ed8b]
[b:3ac395ed8b][]´s[/b:3ac395ed8b]
GOSTEI 0
Emerson Nascimento
06/12/2006
veja se é isso:
SET TERM ^ ; CREATE PROCEDURE SP_DARF5952 ( de date, ate date) returns ( nometelefone varchar(50), periodoap date, datavenc date, valorprincipal float, totalmulta float, mediamulta float, totaljuros float, mediajuros float, valortotal float, darf5952valor float, notasfiscais varchar(150)) as declare variable numeroref varchar(10); declare variable principal char(5); declare variable periodo date; declare variable vencimento date; begin for select NOMETELEFONE, sum(VALORPRINCIPAL), sum(VALORMULTA), avg(VALORMULTA), sum(VALORJUROS), avg(VALORJUROS), sum(VALORTOTAL), sum(DARF5952VALOR) from DARF5952 where DATA between :DE and :ATE group by NOMETELEFONE into :NOMETELEFONE, :VALORPRINCIPAL, :TOTALMULTA, :MEDIAMULTA, :TOTALJUROS, :MEDIAJUROS, :VALORTOTAL, :DARF5952VALOR do begin NOTASFISCAIS = ´´; for select REF, PERIODOAP, DATAVENC, COALESCE(PRINCIPAL, ´NAO´) from DARF5952 where DATA between :DE and :ATE and NOMETELEFONE = :NOMETELEFONE into :NUMEROREF, PERIODO, VENCIMENTO, :PRINCIPAL do begin if (:NOTASFISCAIS <> ´´) then NOTASFISCAIS = NOTASFISCAIS || ´, ´; NOTASFISCAIS = NOTASFISCAIS || :NUMEROREF; if (:PRINCIPAL = ´OK´) then begin PERIODOAP = PERIODO; DATAVENC = VENCIMENTO; end end suspend; end end^ SET TERM ; ^
GOSTEI 0
Rostery
06/12/2006
deu isso:
ixiii, i agora??
:shock:
Dynamic SQL Error SQL error code = -804 Function unknown COASLESCE
ixiii, i agora??
:shock:
GOSTEI 0
Emerson Nascimento
06/12/2006
não é COASLESCE
é COALESCE
outra coisa: qual é o banco de dados? Firebird? Interbase?
é COALESCE
outra coisa: qual é o banco de dados? Firebird? Interbase?
GOSTEI 0
Emerson Nascimento
06/12/2006
não é COASLESCE
é COALESCE
é COALESCE
GOSTEI 0
Rostery
06/12/2006
coloquei [b:a559dfd16a]COALESCE[/b:a559dfd16a]
mas deu o msm erro,,,
uso o Interbase..
mas deu o msm erro,,,
uso o Interbase..
GOSTEI 0
Emerson Nascimento
06/12/2006
coalesce() não existe no interbase, só no firebird.
deixe somente:
deixe somente:
for select REF, PERIODOAP, DATAVENC, PRINCIPAL from DARF5952 where DATA between :DE and :ATE and NOMETELEFONE = :NOMETELEFONE into :NUMEROREF, PERIODO, VENCIMENTO, :PRINCIPAL do
GOSTEI 0
Rostery
06/12/2006
emerson.en certinho!!!!!
alterei o Coaleste e mudei o tipo de dois campos, que estavão como DATE q na minha aplicação são char...
deu certo...
Onde posso encontrar sobre como fazer essas procedures???
obrigado...agora foi... :)
vlw!!! agora falta arrumar alguns detalhes no meu programa e colocar para rodar!!!!
vlw!!!!!!!!!
[b:08f3de42ab][]´s[/b:08f3de42ab]
alterei o Coaleste e mudei o tipo de dois campos, que estavão como DATE q na minha aplicação são char...
deu certo...
Onde posso encontrar sobre como fazer essas procedures???
obrigado...agora foi... :)
vlw!!! agora falta arrumar alguns detalhes no meu programa e colocar para rodar!!!!
vlw!!!!!!!!!
[b:08f3de42ab][]´s[/b:08f3de42ab]
GOSTEI 0