Search  
Friday, May 25, 2012 ..:: 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  Baze de date, tabele, view-uri si indecsi  Select cu o col...
 Select cu o coloana calculata
 
 5/21/2006 2:34:26 AM
User is offlineGhiorghiu Bogdan
928 posts
1st




Select cu o coloana calculata
 (Romania)

 

SELECT ID,OP,CANT FROM stoc where ID_PROD='100' ORDER BY ID

NU STIU CUM SA FAC SA MAI ADAUG LA ACEST SELECT O COLOANA CALCULATA "STOC" IN FUNCTIE DE OP [= I (+) SAU O (-)]

 


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/21/2006 7:34:37 AM
User is offlineCLASSOFT
231 posts
www.classoft.ro
4th


Re: Select cu o coloana calculata
 (N/A)

Nu cred ca locul operatiilor de miscari este in fisierul STOC, daca OP reprezinta tipul de miscare ..

SELECT id_prod, (SUM(cant)*IIF(OP='O',-1,1)) AS STOC_CANT FROM stoc GROUP BY id_prod ORDER BY id_prod

Am presupus ca stoc este fisierul de m.iscari,OP =  O iesire,OP =  O iesire  , OP =  I intrare

Cristi Birlea - CLASSOFT

 5/21/2006 7:42:19 AM
User is offlineCLASSOFT
231 posts
www.classoft.ro
4th


Re: Select cu o coloana calculata
 (N/A)

RECTIFIC LA SUM :  STOC

SELECT id_prod, SUM(cant*IIF(TIP_DOC='O',-1,1)) AS STOC_CANT FROM stoc GROUP BY id_prod ORDER BY id_prod

Cristi Birlea - CLASSOFT

 5/21/2006 11:59:24 AM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)

Cu acest select obtin stocurile totalizate per produs.

Eu am nevoie de fisa de magazie a unui produs. Unte stoc_cant creste (I) sau scade (O) in functie de OP (I - adun la stoc iar O scad din stoc) Bineinteles ca trebuie sa adun sau sa scad din valoarea stoc_cant anterioara. Si asta nu stiu cum sa o fac.


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/21/2006 12:04:11 PM
User is offlineDanTodor
297 posts
4th


Re: Select cu o coloana calculata
 (Romania)
N-am un SQL Server la indemina, dar ar trebui sa mearga cu un subselect, in ipoteza ca ai salvat la fiecare operatie data si ora ( ca sa-i poti spune sa insumeze cu plus sau minus toate operatiile precedente ).
 5/21/2006 12:13:04 PM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)

Lucrez cu SQL Server. Selectul imi da eroare la "=" din IIF. >> Incorrect syntax near '='.

SELECT data, doc_nr, doc_tip, op, cant, SUM(cant) as vstoc FROM stoc where ID_PROD='100' GROUP BY data, doc_nr, op, doc_tip, cant ORDER BY data, op

Acesta este selectul pe care l-am incercat eu si nu reusesc sa il fac sa imi calculeze stocul.


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/21/2006 1:33:54 PM
User is offlineCLASSOFT
231 posts
www.classoft.ro
4th


Re: Select cu o coloana calculata
 (N/A)

Pentru SQL  server nu folosesti IIF ci CASE

SELECT id_prod,

stoc = SUM(

CASE doc_tip

WHEN 'I' THEN cant

ELSE (-1)*cant

END) 

FROM stoc WHERE id_prod ='100' GROUP BY id_prod

Cristi Birlea - CLASSOFT

 5/21/2006 1:53:15 PM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)

Cristi selectul tau merge perfect. Imi calculeaza stocul pe total/produs

Eu vreau sa obtin o fisa cu operatiunile ce sunt facut pe acel produs. Acea fisa de magazie.


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/21/2006 2:11:43 PM
User is offlineDanTodor
297 posts
4th


Re: Select cu o coloana calculata
 (Romania)
Ti-am dat o sugestie cam cum s-ar putea face: daca la CASE-ul respectiv adaugi restricitia de data operatiunii mai mica decit data operatiunii curente si il pui intr-un subselect, s-ar putea sa obtii ce te intereseaza.
 5/21/2006 3:38:09 PM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)

Dane nu m-as supara daca m-ai ajuta cu un exemplu. Merci mult.


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/21/2006 4:00:37 PM
User is offlineCLASSOFT
231 posts
www.classoft.ro
4th


Re: Select cu o coloana calculata
 (N/A) Modified By CLASSOFT  on 5/21/2006 4:01:19 PM)

Am inteles ce vrei ...:) sunt putin obosit

Am scris o varianta de fox

CLOSE ALL
SET EXACT ON
*ORDONEZ DUPA COD SI DATA MISCARII
SELECT *,000000 AS ID_MISCARE  FROM stoc ORDER BY id_prod,data INTO TABLE temp
*SETEZ ID PENTRU MISCARI IN CAZ CA AU LOC IN ACEASI DATA

*aici ar merge si ora miscarii pentru siguranta
REPL ALL ID_MISCARE WITH RECNO()
SELE temp

SELECT id_prod,data,doc_tip,cant,calc_cantx(temp.id_miscare,temp.id_prod) FROM temp INTO TABLE x

*******************
PROCEDURE calc_cantx
*******************
PARAM nIDCalcul,cIdProdus
SELECT SUM(cantitate*IIF(tip_doc='I',1,-1)) AS Calc FROM temp WHERE id_miscare<=nIDCalcul AND id_prod=cIdProdus into cursor y
RETURN y.Calc

Cristi Birlea CLASSOFT

 5/22/2006 11:17:01 AM
User is offlineDoru
160 posts
www.aquila.ro
5th




Re: Select cu o coloana calculata
 (N/A)
In acest caz cred ca este mai rapid un SCAN; REPLACE, fata de repetarea selectului din procedura pentru fiecare miscare. Tragi din SQL datele fisei de magazie ordonate plus o coloana goala de stoc curent si in VFP o completezi cu un scan-replace.
Cristian Tenea
Aquila
 5/22/2006 1:51:57 PM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)

Ma gandeam ca pot rezolva aceasta problema direct din SELECT. Consider ca ar fi fost mult mai bine decat sa fac o prelucrare cu scan.


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/22/2006 3:38:45 PM
User is offlineCLASSOFT
231 posts
www.classoft.ro
4th


Re: Select cu o coloana calculata
 (N/A) Modified By CLASSOFT  on 5/22/2006 3:43:10 PM)
A fost o varianta rapida...poate neoptimizata, dar functionala.
Nu cred ca scapi fara  selecturi din selecturi.La mine  a rulat destul de rapid .
Oricum si pe SQL Server trebuie sa apelezi la FETCH ...
Ai zis ca vrei un fisier cu rezultatul.La mine in aplicatii problema am rezolvat direct in REPORT cu SUM-uri pe subgrupe si merge "beton".

Spor la treaba,
Cristi Birlea - CLASSOFT

 5/22/2006 4:10:28 PM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)

Mersi mult pentru sugestii. Pentru vizualizare voi folosi un scan + relace iar pt printare voi folosi SUM-uri. :)

Daca e cineva care stie sa rezolve problema doar din SELECT (fie el si mai simplu si mai complicat) pt SQL Server il rog sa puna aici rezolvare si nu cred ca i-as fi doar eu recunoscator.

O zi buna !


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/27/2006 9:27:13 PM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)
 

Varianta SQL: (exemplu)

CREATE TABLE #VALUESET (K1 INT IDENTITY, C1 INT)

INSERT #VALUESET (C1) VALUES (20)

.....

 

SI ACUM SELECTUL:

SELECT V.C1, RUNNINGTOTAL=SUM(A.C1)

FROM #VALUESET V CROSS JOIN #VALUESET A

WHERE (A.K1<=V.K1)

GROUP BY V.K1, V.C1

ORDER BY V.K1, V.C1

Scuzati CAPS LOCK.


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/28/2006 3:02:27 AM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)

Hhmmm, nu-mi vine sa cred ce timpi de raspuns am la executarea unei fise de magazie la un produs:

Doua metode de calculare a coloanei stoc:

1 SCAN + REPLACE

2 Secventa SQL de mai sus (adaptata pe tabelele mele)

Rezultate:

1) la 50 de inregistrari:

a) SCAN + REPLACE termina in 0.0004 min cu tenta rareori spre 0.0003 min

b) Secventa SQL termina in 0.0002 min cu tenta rareori spre 0.0001 min

2) la 10 000 de inregistrari:

a) SCAN + REPLACE termina in 0.0437 min

b) Secventa SQL termina in 3.2397 min

 

Oare ce gresesc?

Chiar se misca SCAN + REPLACE mai repede decat SELECT?

 


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/28/2006 3:07:27 AM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)

Hhmmm, nu-mi vine sa cred ce timpi de raspuns am la executarea unei fise de magazie la un produs:

Doua metode de calculare a coloanei stoc:

1 SCAN + REPLACE

2 Secventa SQL de mai sus (adaptata pe tabelele mele)

Rezultate:

1) la 50 de inregistrari:

a) SCAN + REPLACE termina in 0.0004 min cu tenta rareori spre 0.0003 min

b) Secventa SQL termina in 0.0002 min cu tenta rareori spre 0.0001 min

2) la 10 000 de inregistrari:

a) SCAN + REPLACE termina in 0.0437 min

b) Secventa SQL termina in 3.2397 min

 

Oare ce gresesc?

Chiar se misca SCAN + REPLACE mai repede decat SELECT?

 


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/28/2006 3:12:39 AM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)

Ma gandeam ca nu e corect sa discutam fara cod asa ca ...

varianta SCAN + REPLACE (facuta rapid la ciocan)

SELECT vstoc

GOTO top

v_stoc = 0.000

SCAN

v_stoc = v_stoc + vstoc.cant

replace vstoc.stoc WITH v_stoc

ENDSCAN

si varianta SELECT (facuta tot rapid la ciocan)

SELECT s.id, s.cant, RunningTotal=SUM(a.cant)

from stoc s Cross join stoc a

where (a.id<=s.id)

group by s.id, s.cant

order by s.id, s.cant

*** o mica precizare (banuiesc ca aici e buba la select) campul [ID] este varchar(21)


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/28/2006 3:32:03 AM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)

Hhmmm, nu-mi vine sa cred ce timpi de raspuns am la executarea unei fise de magazie la un produs:

Doua metode de calculare a coloanei stoc:

1 SCAN + REPLACE

2 Secventa SQL de mai sus (adaptata pe tabelele mele)

Rezultate:

1) la 50 de inregistrari:

a) SCAN + REPLACE termina in 0.0004 min cu tenta rareori spre 0.0003 min

b) Secventa SQL termina in 0.0002 min cu tenta rareori spre 0.0001 min

2) la 10 000 de inregistrari:

a) SCAN + REPLACE termina in 0.0437 min

b) Secventa SQL termina in 3.2397 min

 

Oare ce gresesc?

Chiar se misca SCAN + REPLACE mai repede decat SELECT?

 


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/28/2006 11:36:15 AM
User is offlineCLASSOFT
231 posts
www.classoft.ro
4th


Re: Select cu o coloana calculata
 (N/A) Modified By CLASSOFT  on 5/28/2006 11:36:46 AM)
Pierderea de viteza de la SELECT este cauzata de comparatia ID-ului , care in acest caz ar fi mai bine sa fie de tip numeric . Nu cred ca modul de abordare este optim pentru rezolvarea problemei tale.

Cristi Birlea -CLASSOFT

 5/28/2006 1:38:31 PM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Select cu o coloana calculata
 (Romania)
Cum l-as putea optimiza? Ce modificari ar trebui sa fac, chiar si in structura tabelelor?
Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 6/15/2006 4:11:08 PM
User is offlineDoru
160 posts
www.aquila.ro
5th




Re: Select cu o coloana calculata
 (N/A)

In FOX este vorba de o secventa foarte simpla si 'stright through' de instructiuni care scaneaza o singura data un cursor, iar in SQL este un cross join care va scana de 10000 de ori cursorul pentru toate id-urile mai mici.

Nu cred ca SQL va iesi mai jos decit fox-ul in cazul asta. Daca obtineti altceva, keep posted.

Se poate face si in SQL un cursor prin care sa ciclezi cu FOR .. EACH dar nu stiu exact cum. Poate varianta asta ar merge mai repede.


Cristian Tenea
Aquila
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  Select cu o col...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement