Fórum Devo usar select ou um view? #59832
27/05/2008
0
Pessoal, fiz esta select aqui para trazer alguns resultados que eu preciso, de um plano de contas que ja peguei montado, e precisava trazer o resultado dos movimentos lancados + as contas do plano de contas contabil.
Esta funcionando certinho o select
Mais gostaria da opnião do pessoal, se é uma boa forma fazer um select deste tipo.
Ou seja se vai ficar lento cfe. os dados cadastrados...Se tem uma maneira de melhorar a performance deste select, ou se é melhor usa-lo com view (Obs: se for usar como view, gostaria de saber como usar, pois não aprendi na pratica ainda como usar views no meu projeto) :oops:
Esta funcionando certinho o select
procedure TFmmAnoBalanco.acConfirmaExecute(Sender: TObject);
begin
begin
if Trim(Edit1.Text) = ´´ then
begin
raise Exception.Create(´Não existe dados para este ano´);
Abort;
end
else
begin
{:Busca sempre o primeiro dia do ano}
Label1.Caption := ´01/01/´+Edit1.Text;
With dm.qrybalanco do
begin
close;
sql.clear;
sql.Text := ´ select distinct(substring(x.conta from 1 for 1)) Conta, ´+
´ x.nmconta, x.saldo_anterior, x.recebimento, x.pagamento, ´+
´ (x.saldo_anterior + x.recebimento - x.pagamento)Sd_Atual ´+
´ from(select distinct(a.conta), b.nmconta, ´+
´ ((select coalesce(sum(recebimento),0) from movcontabil ´+
´ where datamvto < :pdata and b.cdconta = substring(conta ´+
´ from 1 for 1))) - ((select coalesce(sum(pagamento),0) ´+
´ from movcontabil where datamvto < :pdata and b.cdconta = ´+
´ substring(conta from 1 for 1))) Sd_Anterior, (select ´+
´ coalesce(sum recebimento),0) from movcontabil where ´+
´ extract(year from datamvto) = :p_ano and b.cdconta = ´+
´ substring(conta from 1 for 1))as recebimento, ´+
´ (select coalesce(sum pagamento),0) from movcontabil ´+
´ where extract(year from datamvto) = :p_ano and ´+
´ b.cdconta = substring(conta from 1 for 1))as pagamento ´+
´ from movcontabil a, plano_contas b where b.cdconta = ´+
´ substring(conta from 1 for 1))as x ´+
´ union ´+
´ select distinct(substring(x.conta from 1 for 2)) Conta, ´+
´ x.nmconta, x.saldo_anterior, x.recebimento, x.pagamento, ´+
´ (x.saldo_anterior + x.recebimento - x.pagamento)Sd_Atual ´+
´ from(select distinct(a.conta), b.nmconta, ´+
´ ((select coalesce(sum(recebimento),0) from movcontabil ´+
´ where datamvto < :pdata and b.cdconta = substring(conta ´+
´ from 1 for 2))) - ((select coalesce(sum(pagamento),0) ´+
´ from movcontabil where datamvto < :pdata and b.cdconta = ´+
´ substring(conta from 1 for 2))) Sd_Anterior, (select ´+
´ coalesce(sum recebimento),0) from movcontabil where ´+
´ extract(year from datamvto) = :p_ano and b.cdconta = ´+
´ substring(conta from 1 for 2))as recebimento, ´+
´ (select coalesce(sum pagamento),0) from movcontabil ´+
´ where extract(year from datamvto) = :p_ano and ´+
´ b.cdconta = substring(conta from 1 for 2))as pagamento ´+
´ from movcontabil a, plano_contas b where b.cdconta = ´+
´ substring(conta from 1 for 2))as x ´+
´ union ´+
´ select distinct(substring(x.conta from 1 for 3)) Conta, ´+
´ x.nmconta, x.saldo_anterior, x.recebimento, x.pagamento, ´+
´ (x.saldo_anterior + x.recebimento - x.pagamento)Sd_Atual ´+
´ from(select distinct(a.conta), b.nmconta, ´+
´ ((select coalesce(sum(recebimento),0) from movcontabil ´+
´ where datamvto < :pdata and b.cdconta = substring(conta ´+
´ from 1 for 3))) - ((select coalesce(sum(pagamento),0) ´+
´ from movcontabil where datamvto < :pdata and b.cdconta = ´+
´ substring(conta from 1 for 3))) Sd_Anterior, (select ´+
´ coalesce(sum recebimento),0) from movcontabil where ´+
´ extract(year from datamvto) = :p_ano and b.cdconta = ´+
´ substring(conta from 1 for 3))as recebimento, ´+
´ (select coalesce(sum pagamento),0) from movcontabil ´+
´ where extract(year from datamvto) = :p_ano and ´+
´ b.cdconta = substring(conta from 1 for 3))as pagamento ´+
´ from movcontabil a, plano_contas b where b.cdconta = ´+
´ substring(conta from 1 for 3))as x ´+
´ union ´+
´ select distinct(substring(x.conta from 1 for 4)) Conta, ´+
´ x.nmconta, x.saldo_anterior, x.recebimento, x.pagamento, ´+
´ (x.saldo_anterior + x.recebimento - x.pagamento)Sd_Atual ´+
´ from(select distinct(a.conta), b.nmconta, ´+
´ ((select coalesce(sum(recebimento),0) from movcontabil ´+
´ where datamvto < :pdata and b.cdconta = substring(conta ´+
´ from 1 for 4))) - ((select coalesce(sum(pagamento),0) ´+
´ from movcontabil where datamvto < :pdata and b.cdconta = ´+
´ substring(conta from 1 for 4))) Sd_Anterior, (select ´+
´ coalesce(sum recebimento),0) from movcontabil where ´+
´ extract(year from datamvto) = :p_ano and b.cdconta = ´+
´ substring(conta from 1 for 4))as recebimento, ´+
´ (select coalesce(sum pagamento),0) from movcontabil ´+
´ where extract(year from datamvto) = :p_ano and ´+
´ b.cdconta = substring(conta from 1 for 4))as pagamento ´+
´ from movcontabil a, plano_contas b where b.cdconta = ´+
´ substring(conta from 1 for 4))as x ´+
´ union ´+
´ select distinct(x.conta) Conta, ´+
´ x.nmconta, x.saldo_anterior, x.recebimento, x.pagamento, ´+
´ (x.saldo_anterior + x.recebimento - x.pagamento)Sd_Atual ´+
´ from(select distinct(a.conta), b.nmconta, ´+
´ ((select coalesce(sum(recebimento),0) from movcontabil ´+
´ where datamvto < :pdata and b.cdconta = conta)) - ´+
´ ((select coalesce(sum(pagamento),0) from movcontabil ´+
´ where datamvto < :pdata and b.cdconta = conta)) ´+
´ Sd_Anterior, (select coalesce(sum recebimento),0) from ´+
´ movcontabil where extract(year from datamvto) = :p_ano ´+
´ and b.cdconta = conta))as recebimento, ´+
´ (select coalesce(sum pagamento),0) from movcontabil ´+
´ where extract(year from datamvto) = :p_ano and ´+
´ b.cdconta = conta)as pagamento from movcontabil a, ´+
´ plano_contas b where b.cdconta = conta)as x ´;
Params.ParamByName(´pdata´).Value := StrToDate(Label1.Caption);
Params.ParamByName(´p_ano´).Value := StrToInt(Edit1.Text);
Open;
if isEmpty then
begin
MessageDlg(´Não existe dados cadastrado para este ano´, mtInformation, [mbOK], 0);
Abort;
end
else
begin
frmBalanco := TfrmBalanco.Create(Application);
end;
end;
end;
end;Mais gostaria da opnião do pessoal, se é uma boa forma fazer um select deste tipo.
Ou seja se vai ficar lento cfe. os dados cadastrados...Se tem uma maneira de melhorar a performance deste select, ou se é melhor usa-lo com view (Obs: se for usar como view, gostaria de saber como usar, pois não aprendi na pratica ainda como usar views no meu projeto) :oops:
Adriano_servitec
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)