[firebase-br] Join trazer qtde determinada
CPD (Borborema)
cpd em borborema.com.br
Seg Out 19 16:58:47 -03 2009
Elton,
Obrigado por está me ajudando, mas ainda está dando erro. Vamos
trabalhar em cima da primeiro select. :
select
sf.sfo_codigo,
sf.sfo_nome,
fun.cfg_chapa,
fun.cfg_nome,
fer2.fer_funcionario,
fer2.fer_ano,
fer2.fer_mes
from setores_folha sf
left outer join funcionarios fun on (fun.cfg_empresa = sf.sfo_empresa) and
(fun.cfg_setor = sf.sfo_codigo) and (fun.cfg_condicao = '1')
left outer join (select first 1 * from ferias fer1 where (fer1.fer_empresa =
fun.cfg_empresa) and (fer1.fer_funcionario = fun.cfg_cpf) order by
fer1.fer_ano desc, fer1.fer_mes desc) as fer2 on 1 = 1
where (sf.sfo_empresa = :empresa) and (sf.sfo_codigo = :setor)
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
FUN.CFG_EMPRESA.
At line 12, column 38.
Elton, acredito que é referente a sub-select dentro da do left outer join
que segundo alguns colegas do gropo nas versões 2.1.xx está aceitando está
sintax, mas ele critica o campo FUN.CFG_EMPRESA que não faz parte da
sub-select. Quando eu tiro, para teste, o campo na where da sub-select que
não faz parte da da tabela da mesma (FUN.CFG_EMPRESA) não dar erro, mas da
problema no result, porque puxa a 1ª ferias independente do funcionário.
Bem, não sei se deu pra vc endetender, mas o problema e em um campos
(FUN.CFG_EMPRESA) que não faz parte da tabela da sub-select no segundo left
outer join.
Alexandre.
----- Original Message -----
From: "Elton da Motta Barbosa" <embarbosa em gmail.com>
To: <lista em firebase.com.br>
Sent: Thursday, October 15, 2009 9:51 AM
Subject: [firebase-br] Join trazer qtde determinada
Poderia ser algo assim. Como não tenho a estrutura das suas tabelas
pode haver algum erro. Corrija os alias caso não estejam referenciando
a tabela corretamente.
select
sf.sfo_codigo,
sf.sfo_nome,
fun.cfg_chapa,
fun.cfg_nome,
fer2.fer_funcionario,
fer2.fer_ano,
fer2.fer_mes
from setores_folha sf
left outer join funcionarios fun on (fun.cfg_empresa = sf.sfo_empresa)
and (fun.cfg_setor = sf.sfo_codigo) and (fun.cfg_condicao = '1')
left outer join (select first 1 * from ferias fer1 where
(fer1.fer_empresa = fun.cfg_empresa) and (fer1.fer_funcionario =
fun.cfg_cpf) order by fer1.fer_ano desc, fer1.fer_mes desc) as fer2 on
1 = 1
where (sf.sfo_empresa = :empresa) and (sf.sfo_codigo = :setor)
Pelo que eu entendi você quer a última férias de cada funcionário do
setor. Se estiver correto nas minhas deduções, eu aconselharia outro
forma desse query.
Se as férias tiverem um id e forem lançadas de forma cronológica,
então o SQL abaixo resultará no requerido:
select
sf.sfo_codigo,
sf.sfo_nome,
fun.cfg_chapa,
fun.cfg_nome,
fer2.fer_funcionario,
fer2.fer_ano,
fer2.fer_mes
from setores_folha sf
left outer join funcionarios fun on (fun.cfg_empresa = sf.sfo_empresa)
and (fun.cfg_setor = sf.sfo_codigo) and (fun.cfg_condicao = '1')
left outer join (select * from ferias fer1 where (fer1.fer_empresa =
:empresa) and (not exists (select 1 from ferias bb where
bb.CahvePrimaria > fer1.ChavePrimaria and bb.fun_cpf = fer1.fun_cpf)
order by fer1.fer_ano desc, fer1.fer_mes desc) as fer2 on 1 = 1
where (sf.sfo_empresa = :empresa) and (sf.sfo_codigo = :setor)
Bem, seria algo parecido, mas não sem as definições das suas tabelas
não posso ir adiante. Se nenhuma das sugestões funcionar, responda com
a mensagem completa de erro de cada caso, bem como dizendo as
definições da tabela.
Espero Que Ajude,
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista