vreau sa propun o alta varianta pt rezolvarea punctului e).. se va mai crea un camp nou tabelului firme.dbf, care se va numi "nr" si va fi de tip numeric ; in acest camp toate valorile vor fi "1". apoi vom "construi" urmatorul program: CLOSE ALL USE firme INDEX on localitate TAG localitate TOTAL ON localitate TO man1 FIELDS nr USE man1 CALCULATE MAX(nr) TO a LIST localitate, nr for nr=a
ca explicare: functia Total aduna pentru fiecare localitate in parte, numarul de firme; de retinut ca intai s-a facut o indexare a tabelei dupa campul(cheie) "localitate"
Solutia gasita de domnul Andrei este interesanta. O voi discuta mai pe larg mai jos:
Pentru a adauga un nou camp nr la tabela firme ce are valoarea 1 se vor folosi urmatoarele comenzi: ALTER TABLE firme.dbf ADD COLUMN nr NUMERIC(6,0) UPDATE firme.dbf SET nr=1
Comanda urmatoare creaza un index structural numit localitate in fisierul FIRME.CDX folosind campul localitate: INDEX ON localitate TAG localitate
De mentionat ca fisierul index FIRME.CDX este deschis automat odata cu fisierul FIRME.DBF, insa ordinea virtuala data de index nu este folosita implicit. Pentru a folosi un astfel de index se foloste comanda: SET ORDER TO localitate
Comanda urmatoare calculeaza totalul pentru campul numeric nr a grupurilor de inregistrari care au valoarea campului localitate identica si pune rezultatul intr-o noua tabela cu aceeasi structura cu a tabelei firme. Pentru a calcula un total util este nevoie ca tabela firme sa fie sortata sau sa contina un index: TOTAL TO man1 ON localitate FIELDS nr
Comanda urmatoare calculeaza valoarea maxima a campului nr si plaseaza valoarea obtinuta in variabila a: CALCULATE MAX(nr) TO a
Comanda urmatoare listeaza inregistrarile pentru care valoarea campului nr este egala cu a, afisand numai campurile localitate si nr: LIST localitate,nr FOR nr=a
De mentionat ca comanda TOTAL nu va functiona asupra tabelei firme asa cum a fost ea creata fiind necesara eliminarea validarii campului tip: ALTER TABLE firme.dbf ALTER COLUMN tip DROP CHECK
2 comentarii:
vreau sa propun o alta varianta pt rezolvarea punctului e)..
se va mai crea un camp nou tabelului firme.dbf, care se va numi "nr" si va fi de tip numeric ; in acest camp toate valorile vor fi "1".
apoi vom "construi" urmatorul program:
CLOSE ALL
USE firme
INDEX on localitate TAG localitate
TOTAL ON localitate TO man1 FIELDS nr
USE man1
CALCULATE MAX(nr) TO a
LIST localitate, nr for nr=a
ca explicare: functia Total aduna pentru fiecare localitate in parte, numarul de firme; de retinut ca intai s-a facut o indexare a tabelei dupa campul(cheie) "localitate"
va multumesc pt rabdare. Andrei
Solutia gasita de domnul Andrei este interesanta. O voi discuta mai pe larg mai jos:
Pentru a adauga un nou camp nr la tabela firme ce are valoarea 1 se vor folosi urmatoarele comenzi:
ALTER TABLE firme.dbf ADD COLUMN nr NUMERIC(6,0)
UPDATE firme.dbf SET nr=1
Comanda urmatoare creaza un index structural numit localitate in fisierul FIRME.CDX folosind campul localitate:
INDEX ON localitate TAG localitate
De mentionat ca fisierul index FIRME.CDX este deschis automat odata cu fisierul FIRME.DBF, insa ordinea virtuala data de index nu este folosita implicit. Pentru a folosi un astfel de index se foloste comanda:
SET ORDER TO localitate
Comanda urmatoare calculeaza totalul pentru campul numeric nr a grupurilor de inregistrari care au valoarea campului localitate identica si pune rezultatul intr-o noua tabela cu aceeasi structura cu a tabelei firme. Pentru a calcula un total util este nevoie ca tabela firme sa fie sortata sau sa contina un index:
TOTAL TO man1 ON localitate FIELDS nr
Comanda urmatoare calculeaza valoarea maxima a campului nr si plaseaza valoarea obtinuta in variabila a:
CALCULATE MAX(nr) TO a
Comanda urmatoare listeaza inregistrarile pentru care valoarea campului nr este egala cu a, afisand numai campurile localitate si nr:
LIST localitate,nr FOR nr=a
De mentionat ca comanda TOTAL nu va functiona asupra tabelei firme asa cum a fost ea creata fiind necesara eliminarea validarii campului tip:
ALTER TABLE firme.dbf ALTER COLUMN tip DROP CHECK
Trimiteți un comentariu