SQL buscando um mesmo campo em 3 tabelas

22/11/2005

Alguém poderia me ajudar com um código SQL para esta situação:

Tenho tabelas (resumidamente) como abaixo:

MOVTO: (pront, codigo, tipo, quantidade)

SERV: (codigo, descricao)
MAT: (codigo, descricao)
MED: (codigo, descricao)

Preciso de um grid que apresente: pront, codigo, descricao e quantidade

O campo movto.CODIGO pode armazenar 3 tipos de códigos, conforme o conteúdo do campo tipo:

se TIPO = 1 o código se referencia à tabela SERV
se TIPO = 2 o código se referencia à tabela MAT
se TIPO = 3 o código de referencia à tabela MED

Seria algo do tipo:

select M.pront, M.codigo, M.tipo, S.descricao, M.quant
from movto M, serv S, mat T, med D
where (M.tipo=1 and M.codigo=S.codigo) or (M.tipo=2 and M.codigo=T.codigo) or (M.tipo=3 and M.codigo=D.codigo)

porém o S.descricao poderia ser também T.descricao ou D.descricao

A dúvida é:
Como apresentar no mesmo campo DESCRIÇÃO do grid a descrição correspondente a uma das 3 tabelas, que varia conforme o valor de movto.TIPO ?


Aerreira

Respostas

23/11/2005

Firekiller

Qual banco você tá usando????

Se for Firebird (1.5 ou posterior) poderia ficar assim:

select 
    pront, 
    codigo,
    case tipo 
        when 1 then ´SERV´
        when 2 then ´MAT´
        when 3 then ´MED´
        else ´ ´
    end as TIPO,
    case tipo 
        when 1 then (select descricao from serv s where s.codigo=m.codigo)
        when 2 then (select descricao from mat s where s.codigo=m.codigo)
        when 3 then (select descricao from med s where s.codigo=m.codigo)
        else ´ ´
    end as DESCRICAO,
    quantidade 
from
    MOVTO M


dessa forma seria mostrado o que você quer, e ainda especificando o que é, ou seja, qual é o tipo.


Responder Citar

23/11/2005

Aerreira

Qual banco você tá usando????


Esqueci de especificar, mas é FireBird 1.5. sim.
Vou testar e informo em seguida...

Valeu Firekiller...


Responder Citar

23/11/2005

Aerreira

Perfeito.
Deu certo.
Valeu.


Responder Citar