[ Milos Milosevic @ 12.12.2006. 19:59 ] @
SELECT Korisnik.idKorisnika, Korisnik.Ime, Sum(Racuni.iznos) AS SumaDuga, Sum(Uplate.iznos) AS SumaUplata,
SumaUplate-SumaDuga AS Saldo
FROM Korisnik INNER JOIN (Racuni INNER JOIN Uplate ON Racuni.idRacuna=Uplate.idRacuna) ON Korisnik.idKorisnika=Racuni.idKorisnika
GROUP BY Korisnik.Ime, Korisnik.idKorisnika


Vratice rezultate ali ne uzima u obracun i NULL.

Kako ovo resiti?
Pozdrav!
[ Zidar @ 13.12.2006. 15:52 ] @
Zavisi na koji NULL mislis. Ako je NULL u sumi, recimo Sum(Uplate.iznos) , probaj Sum(NZ(Uplate.iznos,0))
Ako je to NULL u JOINu, pa jednostavno ne vraca korisnike koji nemaju uplate, onda koristi LEFT JOIN.

:-)
[ Milos Milosevic @ 13.12.2006. 22:13 ] @
U JOIN-u. Za one (eventualno) koji su novi pa nisu ni jednom uplatili a izdat im je racun.

Onaj :-) verovatno se odnosi i na izbor dizajna baze bez tabele sa obracunima. Da prihvatio sam... :)
Bogu hvala pa se trudim da se oslobodim velike svoje Sujete.

Ostaje pitanje da li je ovo konacna i valjana varijanta:
Korisnik--Dokument--Uplata,
.....(1)--(vise)(1)--(vise),

ako jednom uplatom uplacuje po vise dokumenata, neka prosto razbije na vise uplata-u suprotnom treba i vezna tabela:
Korisnik--Dokument--poDokumentu--Uplata ("nazad za crtacu tablu")

Hvala (Zivela nam Dijaspora! :))
[ BiloKoje @ 14.12.2006. 06:13 ] @

Iz prakse, mislim da je bolje napraviti veze Korisnik>Dokument i Korisnik>Uplate. Koliko god insistirali na jednoj uplatnici po jednom dokumentu, to u praksi ne ide. Uvek se nađe kupac koji uplati jednom uplatnicom više dokumenata, a ne obavesti nas koje dokumente plaće. Takođe je moguće i da izvrši delimičnu uplatu, odnosno da jedan dokumenat plaća sa više uplatnica.
[ Milos Milosevic @ 14.12.2006. 10:22 ] @
Citat:
BiloKoje: Uvek se nađe kupac koji uplati jednom uplatnicom više dokumenata, a ne obavesti nas koje dokumente plaće.


"NE OBAVESTI NAS KOJE DOK UPLACUJE"
=> Korisnik(1)--(vise)Dokument & Korisnik(1)--(vise)Uplata & Dokument-(opciona)-Uplata

Planirao sam polje "regulisan", bool, u tabeli Dokument, koje bi se potvrdivalo pri uplati po dokumentu.
Ako se ne moze imati evidencija o tome po kojem se tacno dokumentu uplacuje, da li to znaci da na
ovo polje ne mogu da racunam?

[ BiloKoje @ 15.12.2006. 05:56 ] @


Nije pouzdano da ćemo uvek imati pouzdan podatak koji dokument se uplaćuje, pa je bolje da se ulata vezuje samo za kupca. Stanje duga ili preplate kupca uvek možemo videti kroz karticu kupca kroz izračunato polje "saldo". Nije suvišno da se uz uplatu naznači i koji je račun plaćen ako to znamo, upravo kroz neko polje koje se opciono popunjava, recimo "poziv na broj dokumenta".

U samoj tabeli "dokumenti", mislim da bi polje "regulisan" bilo suvišno.
[ Milos Milosevic @ 15.12.2006. 14:47 ] @
Hvala i Uzdravlje!
[ Milos Milosevic @ 26.12.2006. 23:42 ] @
Posle duzeg vremena evo problema,
primetio sam anomaliju u istom upitu:

Rezultati u Sumama (SumaUplata i SumaDuga) Uvecani su u pojedinim slogovima, i to po vise puta.
Obicno je to celobrojni umnozak prave sume, mada nisam siguran
da je to pravilo.
I jos nesto: Svakim unosom zapisa u Dugovanja, SumaUplata se umnozava. Kao da sumira-prolazi vise puta
po korisniku.

Napominjem da su dabele u vezi:

[Dokument]8--1[Korisnik]1--8[Uplata]

Query:

SELECT Korisnik.idKor, Nz(Sum(Uplata.iznos),0) as SumaUplata, Nz(Sum(Dokument.iznos),0) as SumaDuga
FROM (Korisnik LEFT JOIN Dokument ON Korisnik.idKor = Dokument.idKor) LEFT JOIN Uplata ON Korisnik.idKor = Uplata.idKor
GROUP BY Korisnik.idKor;

Hvala.

[Ovu poruku je menjao diplIng dana 27.12.2006. u 01:09 GMT+1]
[ goranvuc @ 27.12.2006. 03:01 ] @
Citat:
diplIng: Posle duzeg vremena evo problema,
primetio sam anomaliju u istom upitu:

Rezultati u Sumama (SumaUplata i SumaDuga) Uvecani su u pojedinim slogovima, i to po vise puta.
Obicno je to celobrojni umnozak prave sume, mada nisam siguran
da je to pravilo.
I jos nesto: Svakim unosom zapisa u Dugovanja, SumaUplata se umnozava. Kao da sumira-prolazi vise puta
po korisniku.

Napominjem da su dabele u vezi:

[Dokument]8--1[Korisnik]1--8[Uplata]

Query:

SELECT Korisnik.idKor, Nz(Sum(Uplata.iznos),0) as SumaUplata, Nz(Sum(Dokument.iznos),0) as SumaDuga
FROM (Korisnik LEFT JOIN Dokument ON Korisnik.idKor = Dokument.idKor) LEFT JOIN Uplata ON Korisnik.idKor = Uplata.idKor
GROUP BY Korisnik.idKor;

Hvala.

[Ovu poruku je menjao diplIng dana 27.12.2006. u 01:09 GMT+1]

Nije anomalija, nego "inercija".

Evo kako treba:
Code:

SELECT Korisnik.idKor, Nz(SumaUpl,0) AS SumaUplata, Nz(SumaDok,0) AS SumaDuga
FROM (Korisnik LEFT JOIN 
(SELECT idKor, Sum(iznos) as SumaDok FROM Dokument GROUP BY idKor)
AS Dokumenti ON Korisnik.idKor = Dokumenti.idKor) 
LEFT JOIN 
(SELECT idKor, Sum(iznos) as SumaUpl FROM Uplata GROUP BY idKor)
AS Uplate ON Korisnik.idKor = Uplate.idKor

Naravno, to radi samo za novije verzije Access-a koje podrzavaju referenciranje podupita.