Select na mesma tabela e campo com variáveis diferentes
15/12/2018
0
Tenho uma tabela que contém cadastro de materiais, tanto com nomes comerciais como com nomes genericos
Tenho códigos individuais pros comerciais e pros genericos, porém o campo para descrição do material é o mesmo.
Então o Material 15 Pode ter a descrição Buscopan e ter vinculado o material 30 com a descrição N-Butilescopolamina no cadastro
Fiz um select com full outer join porém só consigo listar a descrição do material genérico quando o comercial é igual ao genérico
Exemplo
select a.cd_materialcomercial , a.ds_material, a.cd_material_generico, b.ds_material from materiais a
full outer join materiais b on a.cd_materialcomerial=b.cd_material_generico
Não consigo obter a descrição quando o genérico é diferente do comercial, tentei fazer um subselect inicialmente mas também não consegui chegar a lugar algum.
Alguém teria alguma luz?
Obrigado
Diego
Post mais votado
16/12/2018
Tente assim:
select a.cd_material, a.ds_material, coalesce(b.cd_material,'') material_generico, coalesce(b.ds_material,'') ds_generico from material a left join material b on b.cd_material = a.cd_material_generico -- aqui estava invertido where a.cd_material='211'
Emerson Nascimento
Mais Posts
15/12/2018
Alex Lekao
Não entendi muito bem, vc quer fazer uma listagem dos materiais, mas eh uma mesma tabela correto?
o material de codigo 15 e 30 estão na mesma tabela, correto?
Um select com group by não resolveria seu problema?
Por exemplo:
select
a.cd_materialcomercial ,
a.ds_material,
a.cd_material_generico
from materiais a
Group by a.cd_materialcomercial , a.ds_material,a.cd_material_generico
desta forma tudo q for exatamente igual em codigo e descrição aparecerao apenas uma vez.
Veja se é isto que vc quer e me informe.
Atenciosamente,
15/12/2018
Emerson Nascimento
15/12/2018
Diego
Então, com um select simples não seria possível. Vou postar valores para ficar mais claro:
select cd_material, ds_material, cd_material_generico from material where cd_material='211'
o resultado seria
cd_material ds_material cd_material_generico
211 buscopan 33700
Porém preciso do ds_material do 33700 na mesma consulta, se eu fizer individualmente: select ds_material from material where cd_material='33700', tenho o DS_material dele N-Butilescopolamina
O que eu precisaria, seria:
cd_material ds_material cd_material_generico ds_materialgenerico
211 buscopan 33700 N-Butilescopolamina
Por isso, tentei:
select a.cd_material, a.ds_material, a.cd_material_generico, b.ds_material as ds_generico from material a
full outer join material b on a.cd_material=b.cd_material_generico
Porém o resultado é esse. ou seja, sem eu conseguir incluir a descrição do 33700
cd_material ds_material cd_material_generico ds_generico
211 Buscopan 20mg/ml (1ml) Inj. 33700 NULL
Não entendi muito bem, vc quer fazer uma listagem dos materiais, mas eh uma mesma tabela correto?
o material de codigo 15 e 30 estão na mesma tabela, correto?
Um select com group by não resolveria seu problema?
Por exemplo:
select
a.cd_materialcomercial ,
a.ds_material,
a.cd_material_generico
from materiais a
Group by a.cd_materialcomercial , a.ds_material,a.cd_material_generico
desta forma tudo q for exatamente igual em codigo e descrição aparecerao apenas uma vez.
Veja se é isto que vc quer e me informe.
Atenciosamente,
17/12/2018
Diego
Tente assim:
select a.cd_material, a.ds_material, coalesce(b.cd_material,'') material_generico, coalesce(b.ds_material,'') ds_generico from material a left join material b on b.cd_material = a.cd_material_generico -- aqui estava invertido where a.cd_material='211'
Clique aqui para fazer login e interagir na Comunidade :)