Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Junior Ehlke

PostGres - SQL - Relacionamento Recursivo

Recommended Posts

Boa tarde,

estou com uma dificuldade em criar um código e preciso de uma ajuda.

Objetivo: Selecionar uma receita e trazer quais produtos eu tenho nesta receita e suas quantidades.

Recursos: Tabela 1 contém um cadastro de receitas, Tabela 2 Contém o cadastro de produtos vinculados a essas receitas.

Problema: Alguns produtos da Tabela 2 são receitas que estão na Tabela 1, portanto é uma receita dentro da outra.

Exemplo: Seleciono Arroz Colorido, ele me traz:

Arroz Branco,

Ervilha,

Milho,

etc

 

porém o Arroz Branco é uma sub receita que contém

 

Arroz Cru,

óleo,

alho,

 

etc e o óleo é outra sub receita que contém

 

óleo litro.

 

 

Fiz um código que diz no primeiro nível se o produto é receita ou não, pensei em caso seja uma receita, ele busque estes produtos, e assim por diante..

 

 

select
c.indc_descricao,
a.indd_cod1 as cod_receita,
c.indc_prod_codigo as cod_receita_v,
a.indd_cod2,
Coalesce((select 1 as rec from industc b where a.indd_cod2=b.indc_prod_codigo and a.indd_unid_codigo=indc_unid_codigo),0) as Prod_e_receita,
(select d.prod_descricao from produtos d where a.indd_cod2=d.prod_codigo) as descricao
from industd a inner join industc c on a.indd_cod1=c.indc_prod_codigo
where a.indd_unid_codigo='024' and c.indc_unid_codigo='024' and c.indc_prod_codigo='111457'
group by 1,2,3,4,5
order by 4;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde, consegui resolver parte de um problema, este foi o codigo que utilizei..

Obrigado.

 

 

WITH RECURSIVE receitas (indd_cod1, indc_descricao,indd_qreceita, indc_rendimento, indd_cod2, indd_unid_codigo, quant_utilizada) AS
(
select
indd_cod1,
indc_descricao,
indd_qreceita,
indc_rendimento,
indd_cod2,
indd_unid_codigo,
(indd_qreceita/indc_rendimento)*indc_rendimento as quant_utilizada
from industd , industc where indd_cod1=indc_prod_codigo and indd_unid_codigo='024' and indc_unid_codigo='024' and indc_prod_codigo='111457'
UNION ALL
select
industd.indd_cod1,
industc.indc_descricao,
industd.indd_qreceita,
industc.indc_rendimento,
industd.indd_cod2,
industd.indd_unid_codigo,
(industd.indd_qreceita/industc.indc_rendimento)*receitas.indd_qreceita as quant_utilizada
from industd, industc
INNER JOIN receitas ON indd_cod2=indc_prod_codigo
where industd.indd_cod1=industc.indc_prod_codigo and industd.indd_unid_codigo='024' and industc.indc_unid_codigo='024'
)
select
indd_cod1,
indc_descricao,
indd_cod2,
prod_descricao,
indd_qreceita,
indc_rendimento,
indd_unid_codigo,
quant_utilizada,
Coalesce((select 1 as rec from industc b where indd_cod2=b.indc_prod_codigo and indd_unid_codigo=indc_unid_codigo),0) as Prod_e_receita
FROM receitas, produtos where indd_cod2=prod_codigo and Coalesce((select 1 as rec from industc b where indd_cod2=b.indc_prod_codigo and indd_unid_codigo=indc_unid_codigo),0) <> '1'
--order by prod_descricao;

Percebam que pelo codigo

 

(industd.indd_qreceita/industc.indc_rendimento)*receitas.indd_qreceita as quant_utilizada

 

eu faço um calculo da receita pelo rendimento atual * a quantidade de receita anterior, porém o cálculo para ai,

quando eu tenho mais vários níveis, exemplo, 3 ou 4, eu só faço essa conta até o anterior, mas deveria ir voltando até o primeiro valor. Como posso melhorar esse codigo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.