• 20 odgovora
  • 6.444 pregleda
sql upit sa uslovom 16.05.2008. u 21:23 · pre 224 meseci #1
Pocetnik sam u SQL-u pa bih trebao pomoc. Imam sledecu tabelu radjenu u excelu

____A_________B_______C_____D________E

1 IME________TIP_____DAN___RED____TIP+RED
2 branko____dolazak____1_____1_____dolazak1
3 branko____dolazak____1_____2_____dolazak2
4 branko____dolazak____1_____1_____odlazak1
5 branko____dolazak____2_____1_____dolazak1
6 branko____odlazak____2_____1_____dolazak1
7 branko____odlazak____2_____2_____odlazak2
8 branko____odlazak____2_____3_____odlazak3

Kolone su sortirane po imenu, tipu pa danu. U excelu ovaj posao resavam na sledeci nacin: Kolonu RED dobijam tako sto u polje d1 unesem broj 1 a ostala polja dobijam sa sledecim if uslovom =IF(AND(C2=C3;B2=B3);D2+1;1). Kolonu TIP+RED dobijam tako sto spojim kolonu tip i red (ocito). Ovaj problem resavam u excelu zato sto ne znam kako bih u accessu u upitu dobio kolonu RED, odnosno TIP+RED. Nedavno sam poceo uciti SQL pa me muci kako da napravim onaj if uslov od malopre. Hvala na svakoj pomoci.
Re: sql upit sa uslovom 20.05.2008. u 14:01 · pre 224 meseci #2
Pogledaj Access help za komandu iif (tacno, iif, ne if) iif ima sintaks gotovoo identicnu Excelovoj i moze se koristiti i u kveriju. Bas ono sto ti treba.
:-)
Re: sql upit sa uslovom 20.05.2008. u 22:27 · pre 224 meseci #3
Dobro mi je poznata iif funkcija, ali ono sto mene muci je kako da formulisem uslov da ako je prvi podatak (polje) u odredjenoj koloni jednak drugom podatku onda ... . U excelu je to lako, ali kako to resiti u accessu, to je ono sto mene muci.
Re: sql upit sa uslovom 21.05.2008. u 00:02 · pre 224 meseci #4
Zaista ne mogu da kazem da sam shvatio tvoj problem u potpunosti - nije mi uopste jasan tvoj prvi post. Ali, ipak sam nesto uradio i nadam se da ce ti pomoci.
Pogledaj u bazi koju sam prikacio upit pod nazivom qryPoredjenje (otvori ga u design modu - ne mozes promasiti, jedini je... :)). Ako zelis da vidis "sirovu" SQL verziju, klikni desnim tasterom misa na njegovu naslovnu liniju i odaberi SQL view.

Ako nisam pogodio problem, molim te da ga malo bolje objasnis - naravno ako zelis da ti pomognemo.

P.S. Zidar je u pravu, iif funkcija je identicna onoj u Excell-u. :D
Potpis
"Takozvani praktični ljudi bili bi korisni i zasluživali bi svaku pohvalu i poštovanje kad od te svoje praktičnosti ne bi hteli da naprave smisao života i razlog svoga opstanka, opravdanje za podjarmljivanje i terorisanje svih onih koji su lišeni toga praktičnog smisla, ali zato stvoreni za druge, možda više i bolje podvige."

Ivo Andric
Re: sql upit sa uslovom 21.05.2008. u 16:50 · pre 224 meseci #5
Nastojacu biti jasniji: poredjenje tipa ako je vrijednost u koloni1 jednaka vrijednosti u koloni2 onda uradi nesto u koloni3, inace uradi nesto drugo u koloni3 nije problem.
Problem je u tome kako napisati uslov tipa: ako je vrijednost u koloni1-redu1 (prvi podatak) jednaka vrijednosti u koloni1-redu2 (drugi podatak) onda uradi nesto u koloni2-redu1.
Znaci kako napisati uslov koji se odnosi na vise redova ISTE kolone, a ne razlicitih kolona a istih redova (ovo potonje je sasvim jasno).
Re: sql upit sa uslovom 21.05.2008. u 18:49 · pre 224 meseci #6
Ne vidim drugi nacin nego da ti ta dva reda iz iste kolone u access-u budu dva razlicita polja (kolone).
Re: sql upit sa uslovom 21.05.2008. u 19:35 · pre 224 meseci #8
Da GETSBI, upravo tako. Znaci treba mi uslov i petlja.
Re: sql upit sa uslovom 21.05.2008. u 19:49 · pre 224 meseci #9
To se može odraditi u VBA kodu i pokrenuti na On Click događaj nekog dugmeta. Zakači primer tabele i nešto testnih podataka u .mdb fajlu pa ću da ti napišem VBA kod. Obavezno napiši uslov u nekoj labeli na formi da bi bilo jasno šta je cilj (svrha) poređenja.
Potpis
https://mzahorjanski.wixsite.com/mzahorjanski
https://www.fiverr.com/miroljubzahorja?up_rollout=true
https://www.youtube.com/@miroljubzahorjanski


Re: sql upit sa uslovom 21.05.2008. u 20:05 · pre 224 meseci #10
Getsbi ako mozes prvo da mi napises da li je ovaj uslov uopste moguce uraditi u ACCESS-u (mislim preko njegovih funkcija). Posle tvog posta pretpostavljam da ne moze. Drugo, ako ne moze u access-u da li moze u SQL-u (poceo sam uciti microsof sql server 2005). Ako moze kako.
Ako ne moze ni na jedan nacin onda cu prvo da pripremim tabelu pa cu ti najverovatnije sutra posle 15 sati uplodovati (posle mog radnog vremena).
U svakom slucaju hvala ti, a i ostalima.
Re: sql upit sa uslovom 21.05.2008. u 21:24 · pre 224 meseci #13
Citat:
Problem je u tome kako napisati uslov tipa: ako je vrijednost u koloni1-redu1 (prvi podatak) jednaka vrijednosti u koloni1-redu2 (drugi podatak) onda uradi nesto u koloni2-redu1.
Znaci kako napisati uslov koji se odnosi na vise redova ISTE kolone


U nekim slucajevima, zadatak moze da se resi u kveriju, a nekada ne. U SQL (pa i Accesu) mogu da se kverijima resavaju zadaci tipa "prikazi zbir svih prethodnih rekorda do tekuceg". Takvi kveriji su prilicno komplikovani za pisanje i mogu da budu dosta spori za izvrsavanje. Zbog toga mnogi ljudi pribegavaju programiranju - cesto je lakse napisati proceduralni kod koji neto odradi nego se maltretirati sa komplikovanim kverijem. Nije ni Excel tako naivan kao sto izgleda :-)

Ako vec ucis sql server 2005, obrati paznju na poglavlje od correlated subqueries. U MS SQL mnogo toga moze da se uradi, ali je isto tako prilicno komplikovano. Mnogo toga sto u Accesu ne moze kverijem da se resi, u MS SQL moze.

Postavi konkretan zadatak, pa da pokusamo da pokazemo- kako se to moze (ako moze) uraditi kverijem, i kako se to programira 'na dugme'. NA forumu Baze Podataka imas top temu Mozgalice gde mozes da vidis kakve sve nebuloze mogu da se odrade u SQL i da se programiranje izbegne, berem teoretski.

:-)
Re: sql upit sa uslovom 21.05.2008. u 22:15 · pre 224 meseci #14
Evo upload-ovo sam tabelu TEST u access-u. Ona je sazet oblik onog sto mi koristimo na poslu. Sledi par objasnjenja uz upload:
kolone se sortiraju po imenu, danu i tipu. Prva vrsta tipa (npr dolazak) u jednom danu treba dobiti sufiks 1, druga 2 itd. Znaci dolazak1, dolazak2, odlazak1, privatni odlazak1 itd. Ovo se radi ponovo za svaki novi dan. Znaci za drugi dan ide opet dolazak1, itd. I tako za svako ime.

Tabelu StaTrebaDobiti sam napravio da bi tacno znali sta je krajnji rezultat. Momci hvala vam na pomoci.
Re: sql upit sa uslovom 22.05.2008. u 10:52 · pre 224 meseci #15
Da bi Access znao koji od dva ista zapisa da uzme mora mu se obezbediti minimalni uslov za to bar primarnim ključem AutoNumber.
Forma „Form1“ pokreće javnu funkciju “Obrada1()“. Pojašnjenje je u VBA kodu.
Dodao sam kolonu „STATUS“ i nju editovao, da bi bilo jasnije i jednim pogledom uočljiv rezultat umesto gledanja u tabelu „StaTrebaDobiti“. Za ponovno testiranje, pobriši vrednosti iz kolone „STATUS“.
Potpis
https://mzahorjanski.wixsite.com/mzahorjanski
https://www.fiverr.com/miroljubzahorja?up_rollout=true
https://www.youtube.com/@miroljubzahorjanski


Re: sql upit sa uslovom 22.05.2008. u 18:04 · pre 224 meseci #16
Dobio si lepo objasnjen kod. Evo sada i kveri koji radi ono sto treba:
Code:
SELECT   A.IME,
         A.DAN,
         A.TIP,
         (SELECT 1 + COUNT(* )
          FROM   TEST AS B
          WHERE  B.IME = A.IME
                 AND B.DAN = A.DAN
                 AND B.TIP = A.TIP
                 AND A.ID > B.ID) AS REDNIBROJ,
         A.ID
FROM     TEST AS A
ORDER BY A.IME,
         A.DAN,
         A.ID;


Ovaj query mora da se kuca, ne moze da se uradi ceo u query designer prozoru. Smeta subquery. Subquery je correlated, ima WHERE uslov koji gleda u glavni query. Ako ipak rdosled za RedniBroj nije u redu, probaj da stavis A.ID < B.ID umesto A.ID > B.ID u subkveriju.

Da bi ovo moglo da radi, potreban je ID autonumber, koji definise redosled odlazaka i dolazaka. Bolje bi bilo da imas neko vreme odlaska/dolaska, jer tada ne bi zavisio od fizickog redosleda unosenja u tabelu.

:-)
Re: sql upit sa uslovom 22.05.2008. u 18:25 · pre 224 meseci #17
Momci, hvala vam na pomoci. Sad mi treba neko vreme da analiziram kodove i prilagodim svojim potrebama.
Re: sql upit sa uslovom 22.05.2008. u 20:31 · pre 224 meseci #20
Sta je elegantnije, to je stvar ukusa :-) Ko brze programira nego sto pise kabaste kverije, brze ce isprogramirati sta mu treba i svi srecni. Ja sam suvise lenj da pisem kod, pa otud kveriji.

Mnogo vaznije je sto je Getsbi ukazao na potrebu dodavanja kolone koja odredjue stvarni redosled rekorda u tabeli test. Bez dodavanja necega sto ce poredjati rekorde, kveri ne bi bio moguc, a ni kod ne bi radio. U Excelu je redosled fiksiran - sto vidis u tabeli, to je to i uvek ce biti tako. Access generalno vraca rekorde u proizvoljnom redosledu.

:-)
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme