SQL buscando um mesmo campo em 3 tabelas
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 ?
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
Curtidas 0
Respostas
Firekiller
22/11/2005
Qual banco você tá usando????
Se for Firebird (1.5 ou posterior) poderia ficar assim:
dessa forma seria mostrado o que você quer, e ainda especificando o que é, ou seja, qual é o tipo.
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.
GOSTEI 0
Aerreira
22/11/2005
Qual banco você tá usando????
Esqueci de especificar, mas é FireBird 1.5. sim.
Vou testar e informo em seguida...
Valeu Firekiller...
GOSTEI 0
Aerreira
22/11/2005
Perfeito.
Deu certo.
Valeu.
Deu certo.
Valeu.
GOSTEI 0