programer Novi Sad
Član broj: 37536 Poruke: 3 *.dynamic.sbb.co.yu.
|
Evo malo zakasneli odgovor, ne znam da li sam razumeo tvoje pitanje ali opisacu ti jedan problem koji sam imao, a u pitanju je JOIN naredba koja moze da bude INNER JOIN, LEFT JOIN i RIGHT JOIN. Recimo da imas dve tabele, ili dva query-ja iz tih tabela:
1. uplate kupaca, upisujes:
datum uplate
broj izvoda
sifru kupca
broj fakture na koju se kupac pozvao
iznos uplate
ovde napravis query koji selektuje sum(uplata) group by broj_fakture jer se desava da po istoj fakturi imas nekoliko uplata, na nekoliko izvoda
2. zaduzenja kupaca
datum racuna
broj racuna
sifru kupca
vrednost racuna
Treba ti sada query koji ce dati spisak svih faktura bez obzira da li su placene ili ne, ali ako jesu da u jednoj od kolona bude ukupno uplacena suma po toj fakturi kao i iznos koliko ostaje za uplatu:
---BROJ_RACUNA---DATUM_RACUNA---IZNOS_ZADUZENJA----IZNOS_UPLATE-------RAZLIKA
=====================================================================
-----1-------------01.01.2007-------------100,00-------------100,00---------------0,00
-----2-------------10.01.2004-------------200,00---------------0,00-------------200,00
-----3-------------20.01.2007-------------150,00--------------75,00--------------75,00
crtice su jer mi editor za poruke pojede blankove pa se ne poklapaju kolone...
Vidis da prva i treca faktura imaju slogove u tabeli uplata, prva je isplacena cela, treca delimicno. Faktura broj dva ima slog samo u tabeli zaduzenja, a NEMA slog u tabeli uplata. Ako ovo uradis sa (INNER) JOIN naredbom ove dve tabele neces u rezultatu dobiti fatkuru broj 2, ali ako napises "LEFT JOIN" (ili RIGHT, zavisi kojim redom si naveo tabele), dobices ovaj red u rezultatu ali umesto 0,00 kao iznosa uplate dobices NULL vrednost jer racun broj 2 nema sloga u uplatama, pa treba da u delu SELECT-a (za poslednje dve kolone u tabeli rezultata) umesto:
..., uplata.iznos as iznos_uplate, zaduzenja.iznos - uplata.iznos as razlika
ubacis:
..., iif(isnull(uplata.iznos)=true,0,uplata.iznos) as iznos_uplate, zaduzenja.iznos - if(isnull(uplata.iznos)=true,0,uplata.iznos) as razlika
Ovo ce ti korigovati NULL vrednost na 0,00. Funkcija IIF ima tri argumenta odvojena zarezom: prvi je uslov, drugi je vrednost koju funkcija vraca ako je on ispunjen, treci je vrednost ako uslov nije ispunjen.
Ne znam da li je ovo problem koji si imao, ali potice od vremena kada sam ja ucio access... imao sam listu kupaca od kojih neki imaju upisan ptt broj, recimo "11000" (iz pomocnog sifarnika ptt brojeva se izvadi da je to Beograd i tako ide na listu), a neki kupci nemaju. Kada uradim JOIN dve tabele KUPCI i PTT po sifri PTT, nema onih bez PTT broja ali ako stavim LEFT JOIN izadju na listu svi. Kada povuces misem linju izmedju dve tabele od sifre ptt u jednoj do sifre ptt u drugoj, klikni desnim klikom na tu liniju u imaces tri opcije za prikaz samo povezanih polja ili svih slogova jedne ili svih slogova druge tabele... i to ce ti automatski pretvoriti i left, right ili inner join.
|