Boa tarde gente…
O caso é o seguinte:
Estou criando um select para consultar funcionários desocupados…
Eu tenho as seguintes tabelas:
OrdemServico,
Parceiro_Comercial (dentro desta tabela tem as colunas funcionario, cliente e fornecedor todas do tipo boolean pra saber qual é o tipo de cada parceiro) e
funcionarioServico (contendo apenas idOrdemServico e idparceiroComercial)
Eu preciso fazer uma consulta em que o usuário vai digitar uma data inicial, uma data final, uma hora inicial e uma hora final e a consulta teria que
mostrar apenas os parceiros do tipo funcionario que estariam livres nesses dias. Se o funcionario estivesse vinculado a uma ordem de servico que batessem com
as datas digitadas pelo funcionario então o sistema naum retornaria estes funcionarios.
eu consegui criar um select e por um momento cheguei a pensar que estava perfeito porem eu encontrei um erro…
a consulta retornava os funcionarios que naum estavao vinculados a nenhuma ordem de servico pq obviamente eles estariam livres e mostrava tambem
os que estavam vinculados em ordem de servico que o horario naum batia mas o erro foi que se o funcionario 1 estivesse vinculado com a ordem de servico 1 e 4
no qual as datas da ordem de servico 1 não bateriam, porem as datas da ordem de servico quatro bateria o sistema retornava o funcionario como se ele estivesse livre,
sendo que neste caso ele não poderia retornar este funcionario…
a consulta que eu fiz foi a seguinte:
[code]
select pc.idparceiro,pc.nome
from parceiro_comercial as pc, ordemServico as os, funcionarioServico as fs
where pc.funcionario = ‘true’ and pc.deletado = ‘false’ and
(fs.idparceiro = pc.idparceiro and fs.idordemservico = os.idordemServico)
and os.idordemservico in (select o.idordemservico from ordemservico as o
where (‘2011-10-27’ > o.datafim) or (‘2011-10-29’ < o.dataInicio)
or (‘2011-10-27’ = o.datafim and ‘06:00’ >= o.horafim and (o.status = ‘Em andamento’ or o.status = ‘Confirmado’) )
or (‘2011-10-29’ = o.datainicio and ‘17:00’ <= o.horainicio and (o.status = ‘Em andamento’ or o.status = ‘Confirmado’)))
union
select pc.idparceiro,pc.nome from parceiro_comercial as pc where pc.funcionario = true AND pc.deletado = false AND
pc.idparceiro not in (select idparceiro from funcionarioservico)[/code]
esperam que consigam me ajudar
abrass…