Search  
Tuesday, August 16, 2022 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Client/Server  M-am impotmolit...
 M-am impotmolit, va rog un ajutor
 
 2/15/2020 11:35:04 PM
User is offlinevaly.m
625 posts
1st


M-am impotmolit, va rog un ajutor
 (N/A) Modified By valy.m  on 2/16/2020 12:56:14 AM)
Salutare.

Asa cum am spus-o si din titlu, m-am impotmolit, nu stiu sa fac o chestie, posibil banala...

Lucrez pe MSSQL, pentru inceput, ca sa stiti ce sintaxa imi trebuie.

Am o tabela Retete, cu headerul unor retete, care contine campurile
IdReteta, CantitateProdusFinit.

Am tabela ReteteDetalii, care contine campurile
IdRetetaDetaliu, IdReteta, IdProdus, CantitateBruta.

Am tabela Produse, care contine campurile
IdProdus, IdTipProdus, IdReteta

In tabela produse am Materie Prima, care va avea intotdeauna IdReteta = null, si Produse finite, care vor avea intotdeauna un IdReteta, din nomenclatorul Retete.

Vreau sa fac un select recursiv astfel incat sa imi aflu toata cantitatea de materie prima de care am nevoie pentru anumite retete din baza de date.

Exemplu:

Consideram IdTipProdus 1 = MP, 2= PF

Produse:
IdProdus | IdTipProdus | IdReteta
1 | 1 | NULL
2 | 1 | NULL
3 | 2 | 1
4 | 1 | NULL
5 | 1 | NULL
6 | 2 | 2

Tabela Retete:

IdReteta | CantitatePF
1 | 0.300
2 | 0.750
3 | 1.000

Tabela ReteteDetalii :

IdRetetaDetaliu | IdReteta | IdProdus | CantitateBruta
1 | 1 | 1 | 0.150
2 | 1 | 4 | 0.250
3 | 1 | 5 | 0.005
4 | 2 | 1 | 0.250
5 | 2 | 3 | 0.900
6 | 2 | 5 | 0.005
7 | 3 | 6 | 1.200
8 | 3 | 5 | 0.015

doar cateva mici exemple...

Dupa cum vedeti, IdProdus = 3, care are in spate reteta 1, apare in reteta 2 ca si materie prima. Deci, practic, in loc de acea cantitate de 0.900 , eu as avea 3 retete de 1, adica CantitateBruta_R2 x CantitateBruta_R1 / CantitatePF_R1, pentru fiecare materie prima a retetei 1 ...
Considerand ca as avea un numar mult mai mare retete, si neinteresandu-ma antitatea cosumata pentru toate retetele, as dori sa aflu materia prima consumata, spre exemplu, pentru un numar de 50 de ori retetele 2 si 3.
Daca nu m-am facut bine inteles, atunci am un meniu care cuprinde retetele 2 si 3. Vreau sa aflu materia prima consumata de 50 de astfel de meniuri.

Nu reusesc sa fac selectul... :(
Am incercat asta, dar nu am reusit pe tabelele mele... https://stackoverflow.com/questions/17358109/how-to-retrieve-all-recursive-children-of-parent-row-in-oracle-sql
Va rog putin ajutor, multumesc!

Vali Maties - Beginner programmer
 2/16/2020 1:01:46 AM
User is offlinevaly.m
625 posts
1st


Re: M-am impotmolit, va rog un ajutor
 (N/A)
Am reusit cu asta:

;with cte (Base, IdRetetaParent, IdRetetaChild, IdProdus, CantitatePF, CantitateaBruta)
as (
select rt.IdReteta Base, rt.IdReteta IdRetetaParent, pr.IdReteta IdRetetaChild, pr.IdProdus,
rt.CantitatePF, rd.CantitateaBruta
from Retete rt
inner join ReteteDetalii rd on rt.IdReteta = rd.IdReteta
inner join Produse pr on rd.IdProdus = pr.IdProdus

union all

select pl.Base, rt.IdReteta IdRetetaParent, pr.IdReteta IdRetetaChild, pr.IdProdus,
cast(pl.CantitateaBruta as numeric (18,3)) CantitatePF,
cast(rd.CantitateaBruta * pl.CantitateaBruta / rt.CantitatePF as numeric(18,5))
from cte pl
inner join Retete rt on pl.IdRetetaChild = rt.IdReteta
inner join ReteteDetalii rd on rt.IdReteta = rd.IdReteta
inner join Produse pr on rd.IdProdus = pr.IdProdus
)
select * from cte where IdRetetaChild is null


Cast -urile sunt din cauza type-urilor coloanelor, daca nu faci cast ridica eroare.

Mersi :)

Vali Maties - Beginner programmer
  Visual FoxPro  Client/Server  M-am impotmolit...

Search  Forum Home         

Copyright 2002-2013 Profox   Terms Of Use  Privacy Statement