Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wawaanjo

Consulta no Oracle

Recommended Posts

Olá

 

Tenho uma tabela que possui todas as viaturas que um prestador possui e todos os serviços (Ordem de Trabalho) que um prestador está fazendo no momento. Depois que o prestador finaliza essa ordem de trabalho, esse registro sai dessa tabela e vai p/ uma tabela de histórico.

 

 

Na consulta que estou fazendo, como eu preciso somente das ordem de trabalho do dia, então coloco um filtro de Data buscando somente o dia atual, porém se uma viatura não realizou serviço naquele dia não traz, ou seja, minha consulta só está trazendo as viaturas que teve ordem de trabalho.

 

 

Eu preciso trazer todas as viaturas e ordem de trabalho do dia para aquela viatura / e as que NÃO tiveram ordem de trabalho no dia eh para trazer também (no campo ordem de trabalho, isso deve estar null)

 

Como faço para que minha consulta retorne também as viaturas que NÃO tiveram Ordem de trabalho??

 

 

Consulta que eu sei todos as viaturas que o prestador possui:

 

Select placa_viatura, CNPJ_Prestador
from Prestador
Where CNPJ_Prestador= '0677000000123';
placa_viatura CNPJ_Prestador
ABC1234 0677000000123
MNS9876 0677000000123
DHW6699 0677000000123
-- Minha consulta
Select placa_viatura, CNPJ_Prestador, ordem_Trab
from Prestador_Historico A
Left Join Prestador B
on B.placa_viatura= A.placa_viatura
Where trunc(A.Data_Hora) = trunc(sysdate)
And B.Pres_Cnpj = '0677000000123'
order by A.Data_Hora;
placa_viatura CNPJ_Prestador ordem_Trab
ABC1234 0677000000123 OT001
ABC1234 0677000000123 OT002
ABC1234 0677000000123 OT003
==> Eu preciso que na consulta retorne as placa_viatura MNS9876 e DHW6699 também.
Teria que ficar assim:
placa_viatura CNPJ_Prestador ordem_Trab
ABC1234 0677000000123 OT001
ABC1234 0677000000123 OT002
ABC1234 0677000000123 OT003
MNS9876 0677000000123
DHW6699 0677000000123

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse link não abre e não me ajudou :(



Na minha consulta estou usando o LEFT JOIN e ainda assim não traz todas as viaturas da primeira tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente com outer join.

Pesquise a documentação da Oracle.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Li e re-li, mas Left Outer Join não resolve. Não traz as viaturas que não teve serviço.

Conceitualmente falando deveria funcionar, pois preservaria todas as informações da primeira tabela.

Eu acredito que eh por questão de Data, sei lá..

 

Enfim.... infelizmente não funcionou. Realmente parece ser uma questão simples, mas em se tratando de tabela histórica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, pois a data fica nula e vc precisa tratar isto.

 

Where (trunc(A.Data_Hora) = trunc(sysdate) or a.data_hora is null)

 

Outra solucao é fazer um union com um subselect de not exits. Amanha posto uma solucao pois estou no tablet.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.