3
respostas

Como Usar duas tabelas com case

Exemplo:
select tabela1
case when <Campo_de_outra_tabela> then xxxxx
case when <Campo_da_mesma_tabela> ???????
3 respostas

Você tem que dar JOIN nelas para pode usar.

Supondo que você tenha as seguintes tabelas

ALUNO

id - nome - estado

CURSO

id - nome - hora_inicio

MATRICULAS

id - aluno_id - curso_id

E você queira um resultado assim:

aluno_id, aluno_nome, região (de acordo com o estado), período (de acordo com o horário de inicio), você teria que fazer um JOIN entre as tabelas e escrever uma consulta como esta:

SELECT A.id, A.nome,
CASE 
WHEN A.estado = 'SP' OR A.estado = 'MG' or A.estado = 'RJ' OR A.estado = 'ES' then 'SUDESTE'
WHEN A.estado = 'RS' OR A.estado = 'SC' or A.estado = 'PR' then 'SUL'
ELSE 'SEM REGIAO' END as regiao, 
CASE
WHEN C.hora_inicio < 12 then 'MANHA'
WHEN C.hora_inicio > 12 and  C.hora_inicio <18 then 'TARDE'
ELSE 'NOITE' END as periodo
from aluno as A 
INNER JOIN matriculas as M ON A.id = M.aluno_id 
INNER JOIN curso as C on C.id = M.curso_id

Exemplo: Nesse caso eu fiz um JOIN entre as tabelas ORDEMCOMPRA e ORDEMCOMPRA_LINHA e apresentei se o pagamento pode ser feito utilizando um CASE.

Quando a coluna TB1.STATUS (tabela ORDEMCOMPRA) for APROVADO e a coluna TB2.LINHA_RECEBIDA (tabela ORDEMCOMPRA_LINHA) for SIM então exibirá PAGAR, senão exibirá NAO PAGAR.

select    tb1.id,
            tb2.produto_id,
            case
            when tb1.status = 'APROVADA' and tb2.linha_recebida = 'SIM'
            then 'PAGAR'
            else 'NAO PAGAR'
        end as SituacaoPagamento
from    ordemcompra tb1 with (nolock)
inner join
        ordemcompra_linha tb2 with (nolock)
on        tb2.id = tb1
where tb1.datacompra > getdate() - 30;