Select na mesma tabela e campo com variáveis diferentes
Boa tarde jovens.
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
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
Curtidas 1
Melhor post
Emerson Nascimento
16/12/2018
Acredito que você esteja fazendo o relacionamento errado.
Tente assim:
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'
GOSTEI 2
Mais Respostas
Alex Lekao
15/12/2018
Oi Diego, boa tarde!!!
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,
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,
GOSTEI 1
Emerson Nascimento
15/12/2018
publique os 2 registros do exemplo passado (se possível, todos os campos).
GOSTEI 1
Diego
15/12/2018
Alex, boa noite.
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
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
Oi Diego, boa tarde!!!
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,
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,
GOSTEI 0
Diego
15/12/2018
Na mosca Emerson, o relacionamento estava invertido! Muito obrigado!
Acredito que você esteja fazendo o relacionamento errado.
Tente assim:
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'
GOSTEI 0