Ir para conteúdo

Arquivado

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

Go Back

[Resolvido] Sintaxe CASE

Recommended Posts

Boa Tarde.

 

Tem como eu fazer um CASE WHEN em um INNER JOIN ?

Por exemplo:

 

Na minha tabela tem dois campos FK. Um campo desses vai ser vazio a cada registro.

Supondo, tenho ID_Tabela_1 e ID_Tabela_2, as vezes um desses ficará com valor NULL.

 

E na hora de fazer o JOIN vai dar errado. Eu não posso fazer um LEFT JOIN, ou RIGHT JOIN devido a redundância de dados que vai ocorrer na consulta.

 

Então preciso fazer um:

SELECT 
  CAMPO1, 
  CAMPO2, 
  CAMPO3
FROM
  TABELA   
CASE 
  ID_TABELA 1 = 
  WHEN NULL THEN INNER JOIN TBL1.....
  ELSE INNER JOIN TBL2.....

 

Mas não sei fazer.

 

Tem Como ou Jeito Melhor de Se Fazer Isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cade o Motta ?

 

select 
statusos, 
id_faturamento, 
vlvenda, 
id_codcontrato, 
tblcomcontratos.codcliente, 
razaosocial, 
tblplantacliente.codplanta,	
descricao, 
outrosvl, 
vlbruto, 
vl_liquido, 
convert(varchar, dtprevfaturamento, 103) as dtprevf, 
convert(varchar, dtinserido, 103) as dtinserido, 
convert(varchar, dtfaturado, 103) as dtfaturado, 
observacao, 
tblfin_faturamento.status 
from 
tblfin_faturamento 
-- esse inner ******************************
inner join 
tblcomcontratos on tblcomcontratos.codcontrato = tblfin_faturamento.id_codcontrato 
inner join 
tblcliente on tblcliente.codcli = tblcomcontratos.codcliente 
-- esse inner ******************************
inner join  
tblplantacliente on tblplantacliente.codplanta = tblcomcontratos.codplanta

 

Estão vendo onde eu marquei ? Então, preciso fazer um IF ou CASE ali. Caso o ID_CODCONTRATO seja Vazio, ele faça um outro INNER.

 

Resolvido

select 
statusos, 
id_faturamento, 
vlvenda, 
id_vendaspot,
id_codcontrato, 
tblcliente.codcli, 
razaosocial, 
tblplantacliente.codplanta,	
descricao, 
outrosvl, 
vlbruto, 
vl_liquido, 
convert(varchar, dtprevfaturamento, 103) as dtprevf, 
convert(varchar, dtinserido, 103) as dtinserido, 
convert(varchar, dtfaturado, 103) as dtfaturado, 
observacao, 
tblfin_faturamento.status 
from 
tblfin_faturamento 
left join 
tblcomcontratos on tblcomcontratos.codcontrato = tblfin_faturamento.id_codcontrato 
left join
tblcomvendas on tblcomvendas.codvenda = tblfin_faturamento.id_vendaspot 
inner join 
tblcliente on 
case
	when tblcomcontratos.codcliente is null then tblcliente.codcli
	else tblcomcontratos.codcliente
end = tblcomvendas.codcliente
inner join  
tblplantacliente on 
case
	when tblcomcontratos.codplanta is null then tblplantacliente.codplanta
	else tblcomcontratos.codplanta
end = tblcomvendas.codplanta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou assim ?

 

Eu tentaria uma VIEW que fizesse um "union all" de tblcliente e tblplantacliente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou... achei que tinha funcionado.

Mas depois eu corrigi, veja;

 

select 
statusos, 
id_faturamento, 
vlvenda, 
id_vendaspot, 
id_codcontrato, 
tblcliente.codcli, 
razaosocial,  
tblplantacliente.codplanta,	
descricao, 
outrosvl, 
vlbruto, 
vl_liquido, 
convert(varchar, dtprevfaturamento, 103) as dtprevf,  
convert(varchar, dtinserido, 103) as dtinserido, 
convert(varchar, dtfaturado, 103) as dtfaturado, 
observacao, 
tblfin_faturamento.status 
from 
tblfin_faturamento 
left join 
tblcomcontratos on tblcomcontratos.codcontrato = tblfin_faturamento.id_codcontrato 
left join	
tblcomvendas on tblcomvendas.codvenda = tblfin_faturamento.id_vendaspot 
inner join 	
tblcliente 
on 
case 
	when tblfin_faturamento.id_codcontrato is null then tblcomvendas.codcliente
	else tblcomcontratos.codcliente
end = tblcliente.codcli
inner join  
tblplantacliente 
on 
case 
	when tblfin_faturamento.id_codcontrato is null then tblcomvendas.codplanta 
	else tblcomcontratos.codplanta 
end = tblplantacliente.codplanta		

 

Eu nunca usei o Union All.

Nao sei usar.

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.