[firebase-br] SQL novamente!!!
Andrei Luís
compuvale.software em gmail.com
Sex Maio 8 16:05:02 -03 2009
Olá Luis,
Dá, tem que adaptar um pouco mas dá. Como o Eduardo lhe explicou na outra
thread, tem que fazer uma Stored Procedure ou utilizar Execute Block se
estiver usando FB 2.X.
Seria +/- assim: (não testei mas deve funcionar)
Detalhe que precisa retorar cada um dos campos para variáveis diferentes.
Vou comentar as linhas que alterei/adicionei
dataini = '01.01.2009'; -- definindo o valor das variáveis, o valor pode
ser também recebido ao executar a SP
datafim = '31.01.2009';
memory_t1 = nome_da_tabela;
select
id_nf,
id_produto,
valor_liq,
ipi_valor,
valor_liq-ipi_valorliquido,
id_vendedor,
d.comissao,
case
when d.comissao='A' then c.comissaoA
when d.comissao='B' then c.comissaoB
when d.comissao='C' then c.comissaoC
when d.comissao='D' then c.comissaoD
when d.comissao='E' then c.comissaoE
when d.comissao='F' then c.comissaoF
else 0
end perc_comissao,
0.00 valor_comissao
from nfprodutos a
left join nfmestre b on b.id = a.id_nf
left join vendedores c on c.id = b.id_vendedor
left join produtosprincipal d on d.id = a.id_produto
where b.geracao_data between :dataini and :datafim
into :wid_nf, :wid_produto, :wvalor_liq, :wipi_valor,
:wvalor_liq_valor_liquido, :wid_vendedor, :wcomissao, :wperc_comissao,
:wvalor_comisao;
wSQL := 'update ' || :memory_t1 || ' set valor_comissao = liquido *
(perc_comissao/100)';
Execute statement wSQL;
wSQL := 'select id_vendedor,nome,sum(liquido)
total_vendido,sum(valor_comissao) total_comissao from ' || :memory_t1 || ' a
left join vendedores b on b.id = a.id_vendedor group by id_vendedor order by
nome';
Execute statement wSQL;
[]
Andrei
2009/5/8 <luis em bmsoft.com.br>
> Pessoal,
>
> No DBisam tinha uma query para fazer um relatório assim:
>
> ******** INICIO *********
> select
> id_nf,
> id_produto,
> valor_liq,
> ipi_valor,
> valor_liq-ipi_valor liquido,
> id_vendedor,
> d.comissao,
>
> case
> when d.comissao='A' then c.comissaoA
> when d.comissao='B' then c.comissaoB
> when d.comissao='C' then c.comissaoC
> when d.comissao='D' then c.comissaoD
> when d.comissao='E' then c.comissaoE
> when d.comissao='F' then c.comissaoF
> else 0
> end perc_comissao,
> 0.00 valor_comissao
>
> into "memory\t1"
> from nfprodutos a
> left join nfmestre b on b.id = a.id_nf
> left join vendedores c on c.id = b.id_vendedor
> left join produtosprincipal d on d.id = a.id_produto
> where b.geracao_data between '[dataini]' and '[datafim]'
> ;
> update "memory\t1" set valor_comissao = liquido * (perc_comissao/100)
> ;
>
> select id_vendedor,nome,sum(liquido) total_vendido,sum(valor_comissao)
> total_comissao
> from "memory\t1" a
> left join vendedores b on b.id = a.id_vendedor
> group by id_vendedor
> order by nome
> ********* FIM ***********
>
> ISSO DÁ PRA FAZER NO FIREBIRD??
>
>
> --
> _________________________________________
> BMSOFT - SERVIÇOS DE INFORMÁTICA LTDA.
> Luis C. de Azevedo
> Analista de Sistemas
> (47)8848-9722
Mais detalhes sobre a lista de discussão lista