Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 descricaoObrigado Motta,
parece ser sim, porém não sou familiarizado com a documentação haha vou estudar.
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'
)
selectCoalesce((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?
Procurando pelo equivalente ao do Oracle
achei isto.
Ajuda ?