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  Cod, sintaxa si comenzi  O problema cu S...
 O problema cu SQL
 
 6/6/2010 11:43:34 PM
User is offlinealemao
111 posts
5th


O problema cu SQL
 (N/A)
As avea nevoie de cineva care se pricepe la comenzi SQL.
Am un tabel cu 3 campuri/coloane (nr_id (i), perioada (c), suma (n))
Astfel, avand in vedere ca nr_id se repeta pentru mai multe perioade, se cere:
- efectuarea unei interogari in asa fel incat nr_id sa nu se mai repete (folosind group by sau distinct nr_id);
- informatia care se gaseste in coloana perioada sa fie transpusa corespunzator pe orizontala
respectiv, pentru perioada 2010/03 sa fie o coloana care sa contina suma, pt. perioada 2009/12 sa fie o alta coloana care contine suma si tot asa mai departe.
Prin urmare, problema mea e ca nu reusesc sa fac aceasta incrucisare printr-o comanda SQL.
Are cineva rabdarea si timpul sa se incumete ca sa-i dea de capat!
 6/7/2010 8:23:29 AM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: O problema cu SQL
 (N/A)
select perioada, sum(suma) as total from tabela_ta group by 1 into cursor crs1
 6/8/2010 10:15:26 PM
User is offlinealemao
111 posts
5th


Re: O problema cu SQL
 (N/A)
Multumesc pentru promptitudea raspunsului.

Din pacate cred ca explicatia mea nu a fost una precisa.

Deci, fisierul are 3 coloane:
1) nr_id - integer
2) perioada - character 10 (care contine luna si anul de forma ll/aaaa)
3) datorat - numeric 10,2

Fisierul contine clientii cu sumele datorate deja totalizate pe trimestre (exemplu date din coloana perioada: 09/2009, 12/2009, 03/2010, s.a.m.d.).
Astfel, clientul X poate avea datorii scadente din trimestrele 12/2009 si din 03/2010. Clientul Y poate avea datorii din trimestrele 03/2009 si 09/2009.

Avand in vedere ca un client poate sa figureze in fisier cu sume datorate din mai multe trimestre (nr_id al acestuia se repeta), se cer urmatoarele:
-clientul cu nr_id sa apara doar o singura data.
-identificarea trimestrelor din coloana/campul perioada;
-urmare identificarii trimestrelor din fisier vor fi create noi coloane/campuri care sa aiba ca denumire trimestrele identificate anterior (ex. daca sau identificat 2 trimestre, vor fi create 2 coloane/campuri cu denumirea datorat_12/2009 si datorat 12/2010)
-aceste noi coloane create sa contina datele/sumele din coloana datorat.

Rezultatele acestei interogari SQL sa fie incluse intr-o tabela cu structura urmatoare:
1) nr_id
2) datorat_perioada_1
3) datorat_perioada_2
......
x) datorat_perioada_n

Remarca: nr de coloane datorat va fi in functie de nr de trimestre identificate/continute de campul perioada.

Sper ca acum am fost mai exact in exprimare si m-am facut inteles.

Bun si acum intrebarea mea.
Exista vreo sansa de a rezolva aceasta problema folosind comenzile SQL?
Poate cineva sa gaseasca solutia?

Cu stima,
Angy
 6/9/2010 6:52:40 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: O problema cu SQL
 (N/A) Modified By Daniel Buduru  on 6/9/2010 9:40:30 AM)
Operatia prin care liniile se trec pe coloane se numeste crosstabulare. In vfp exista un program care poate face asta pentru tine. Daca nu ma insel, se numeste xtab si se gaseste in forulvfp.Se poate rezolva prin comenzi SQL total - daca folosesti de ex sql server ai operatorul PIVOT - sau partial, in vfp, printr-un select construit in mod dinamic.
Varianta cu selectul dinamic ar putea fi urmatoarea:
SELECT DISTINCT perioada FROM tabela INTO ARRAY aper
lcSQL='SELECT nr_id '
FOR lnI=1 TO ALE\N(aper,1)
   lcSQL=lcSQL+[, SUM(IIF(perioada="]+aper(lni,1)+[",datorat,0) as datorat_perioada_]+TRAN(lni)
NEXT lni
lcSQL=lcSQL+[ FROM tabela GROUP BY nr_id  INTO CURSOR crsCrosstab]

EXECSCRIPT(lc SQL)
 sau

&lcSQL

Codul nu e testat, poate avea greseli de tastare

Daniel Buduru
 7/1/2010 8:04:47 PM
User is offlinealemao
111 posts
5th


Re: O problema cu SQL
 (N/A)
ok, multumesc pentru raspuns si mii de scuze pt intarziere.
urmeaza sa testez codul transmis de tine.
totusi, o intrebare
de fapt ce reprezinta parantele drepte ?

ps
folosesc vfp9

multumesc anticipat
 7/1/2010 8:04:54 PM
User is offlinealemao
111 posts
5th


Re: O problema cu SQL
 (N/A)
ok, multumesc pentru raspuns si mii de scuze pt intarziere.
urmeaza sa testez codul transmis de tine.
totusi, o intrebare
de fapt ce reprezinta parantele drepte ?

ps
folosesc vfp9

multumesc anticipat
 7/1/2010 10:11:31 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: O problema cu SQL
 (N/A)
Reprezinta separatori pentru stringuri, in aceeasi categorie cu ghilimelele si asteriscurile

lcString = ["'], de exemplu.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 9/5/2010 12:21:59 PM
User is offlinealemao
111 posts
5th


Re: O problema cu SQL
 (N/A)
Desigur
Alooo, buna dimineata alemao.
Help-ul mai trebuie studiat din cand in cand. Nu de alta dar se uita.
Iar romanii (aia din Roma veche) nu au zis degeaba:
Repetitio mater studiorum est!

Multam pentru rabdare maestre Grig.
  Visual FoxPro  Cod, sintaxa si comenzi  O problema cu S...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement