SQL múltiplos
luis em bmsoft.com.br
luis em bmsoft.com.br
Dom Jun 14 14:37:21 -03 2009
Pessoal,
Mais uma...
Eu usava o DBisam... um "banco de dados" pequeno que aguenta bem as minhas
tabelas...
Eu tenho muitos SQLs com 2 linhas de comando usando tabelas temporárias, e
para fazer isso eu usava vários comandos SQL em uma mesma query separados
por ponto e vírgula, que passava para o banco... para exemplificar...
Neste SQL eu pego todos os registros que estão em aberto no contas a receber
antes de uma determinada data e coloco numa tabela temporária... depois eu
pego todos os registros da tabela entre 2 datas (recebidos e em aberto) e
coloco em outra tabela temporária... depois eu faço orders, etc.
Pergunta: Dá pra fazer algo parecido do Firebird??
Ai vai o SQL:
/* --- INICIO --- */
select
a.doc_num,
a.doc_serie,
a.vencimento,
b.nome,
substring( cast( f.dados_adicionais as varchar(40)),1,40) programa,
a.valor,
c.data_recto,
c.valor_recto,
d.apelido banco,
e.apelido corretor,
a.status,
extract(year from vencimento) ano,
extract(month from vencimento) mes
into "memory\t1"
from dprprincipal a
left join clientesprincipal b on b.id = a.id_cliente
left outer join dprbaixas c on c.id_dp = a.id
left outer join bancos d on d.id = a.id_banco
left outer join vendedores e on e.id = a.id_vendedor
left outer join nfmestre f on f.id = a.id_nf
where (vencimento >= '2000-01-01') and (vencimento < '2009-06-01') and
a.status='A'
order by vencimento
;
/* Formatar programa... */
update "memory\t1" set programa = substring(programa,pos('P=',programa),5)
;
update "memory\t1" set programa = '' where pos('P=',programa)=0
;
select
a.doc_num,
a.doc_serie,
a.vencimento,
b.nome,
substring( cast( f.dados_adicionais as varchar(40)),1,40) programa,
a.valor,
c.data_recto,
c.valor_recto,
d.apelido banco,
e.apelido corretor,
a.status,
extract(year from vencimento) ano,
extract(month from vencimento) mes
into "memory\t2"
from dprprincipal a
left join clientesprincipal b on b.id = a.id_cliente
left outer join dprbaixas c on c.id_dp = a.id
left outer join bancos d on d.id = a.id_banco
left outer join vendedores e on e.id = a.id_vendedor
left outer join nfmestre f on f.id = a.id_nf
where (vencimento >= '2009-06-01') and (vencimento <= '2009-06-30')
order by vencimento
;
/* Formatar programa... */
update "memory\t1" set programa = substring(programa,pos('P=',programa),5)
;
update "memory\t1" set programa = '' where pos('P=',programa)=0
;
insert into "memory\t2" select * from "memory\t1" order by
mes,ano,vencimento
;
select * from "memory\t2"
/* --- FIM --- */
--
_________________________________________
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