|
Microsoft Office Access |
|
|
Napredni upiti (2)Nivo:
Nastavljamo priču o zanimljivim oblicima upita: u prvom određujemo proizvoljni opseg datuma u nekom vremenskom intervalu, a u drugom se bavimo načinom postavljanja atipičnog operatora u upit u nameri da u tabeli sa opsegom vrednosti pronađemo zapis koji odgovara konsultovanoj vrednosti. Upit koji određuje željeni interval datumaVaš zadatak je da transakcije grupišete po periodima i to kvartalno, mesečno i u periodima od po 30 dana. Dok su prva dva zadatka laka za izvođenje, treći na prvi pogled predstavlja problem. Zapravo, period od 30 dana možete smatrati kao proizvoljan period - kada definišete grupisanje podataka po tom periodu, istim sistemom možete napraviti i izveštaje sa podacima grupisanim po bilo kom intervalu. Za rešenje ovog zadatka se nameće funkcija Partition(broj, početak, kraj, interval) koju je preporučljivo koristiti upravo u upitima. Funkcija vraća vrednost koja je indikator kom intervalu pripada zadati broj. U ovom slučaju funkcija glasi ovako: Partition(Now( )-[fldDatum],1,360,30) Prvi parametar je broj koji predstavlja razliku između tekućeg datuma i polja u kome je datum zapisan. Drugi i treći parametar kazuju početak i kraj perioda, dok poslednji parametar definiše intervale po 30 dana. Običnim rečnikom rečeno, zahtevali ste da vidite odgovor na pitanje: "Kom intervalu pripada broj proteklih dana od zadatog datuma do danas u opsegu između 1 i 360 podeljenog na po 30 dana?". Funkciju upotrebite u Crosstab upitu kao Column Heading, mada je možete primeniti i u običnom upitu. U Crosstab upitu, rezultat funkcije će predstavljati naziv polja, dok će u običnom upitu vrednost funkcije biti ispisana pored ostalih podataka u okviru slogu. Za rezultat će upit vratiti polja sa nazivima 1:30, 31:60 i tako dalje, sve do 330:360, odnosno ukupno 12 polja sa intervalima po 30 dana i jedno polje koje će sumirati vrednosti za datume starije od 360 dana (ovo polje ima naziv 360:). Ovde bi trebalo da predvidite i mogućnost da datumsko polje neće obavezno sadržavati vrednost. U tom slučaju, funkcija će vratiti naziv polja <>. Drugi zaseban slučaj je naziv polja :0 koji govori da je uneti datum pogrešan, jer je u budućnosti. U ovom prikazu, iz naziva polja smo izostavili razmake koje Access postavlja, kako biste naknadno mogli eventualno da korektno sortirate rezultate. Postoji nekoliko nedostataka ovog metoda. Ukoliko želite nejednake intervale, moraćete da napišete VBA funkciju kojom ćete parsirati razliku datuma. U gornjem primeru, možda ćete zahtevati prikaz prvog intervala između 0 i 30 dana, a ne između 1 i 30 dana. Moguće je da se u određenim okolnostima rezultat neće pojaviti u upitu i to u slučaju kada broj leži van definisanih intervala ili kada neki od parametara funkcije ima vrednost Null. Da biste to izbegli, koristite savet iz prethodnog broja Upotreba operatora BetweenU sledećem primeru, napravićete relaciju između dve tabele čija povezana polja nemaju jednake vrednosti. Obično povezujete indeksirana polja koja su u obe tabele ista, a zatim prikazujete vrednosti ostalih zapisa na osnovu pojavljivanja istih brojeva u jednoj, drugoj ili obe tabele. Manje je poznato da je moguće napraviti relaciju između tabela koristeći operator Between. Na konkretnom primeru, zadatak je da povežete tabele sa uspehom učenika na zadatku, mereno vrednostima između 1 i 100 poena, i tabelu sa ocenama u kojoj su definisani rasponi poena i njihovo vrednovanje ocenom. Postoje i drugi, u izvesnom pogledu lakši načini da ovo uradite, ali zahtevaju kompleksne izraze ili VBA programiranje. Na ovom primeru se zadržavamo u nadi da ćete prepoznati neke prednosti ovog načina. Relaciju između polja dve tabele grafički formirate u gornjem oknu dizajna upita, prevlačeći polje jedne tabele na polje druge tabele. Relaciju kod kojih ova polja nisu u jednakosti jedno prema drugome nećete moći da formirate na ovaj način. Pogledajte sliku:
U ovom primeru, postoje tabele tblUcenici i tblOcene između kojih ćete postaviti relaciju. Pređite na dizajn novog upita i postavite obe tabele u upit. U mrežu polja prenesite polja koja želite, ali obavezno i ono polje nad kojem ćete uspostaviti relaciju. Kako niste postavili relaciju između tabela, Accessu morate staviti do znanja kako da uspostavi relaciju. To ćete učiniti tako što u kriterijumu polja koje čini relaciju upišete sledeće: Between [tblOcene].[DonjiB] And [tblOcene].[GornjiB] Iako Access ne može grafički da predstavi relaciju Between, njen opis možete videti kada pređete u SQL prikaz upita. U tom slučaju videćete sledeću SQL strukturu: SELECT tblUcenici.Ucenik, tblUcenici.Ocena, tblOcene.Ocena FROM tblUcenici, tblOcene WHERE (((tblUcenici.Ocena) Between [tblOcene].[DonjiB] And [tblOcene].[GornjiB])); Primećujete da se u iskazu ne pominje INNER JOIN koji bi postojao u običnom upitu. Na ovom primeru ste koristili operator Between, ali u tome niste ograničeni. Možete koristiti bilo koji od narednih operatora: In, >, <, >=, <= ili <>, pa čak i InStr. Brzinu rada ovog upita, kao i u slučaju svakog drugog upita, možete povećati ako indeksirate polja koja čine relaciju.
|
|
Vrh stranice Prethodna stranica Naslovna strana Mapa sajta Pretraga |
| AFORIZAM ZA DANAS | OVIH DANA SLUŠAMO... |
| Copyright © Praktikum na Webu, 2000-2011; Valinor Design; sva prava pridržana. |