Za resenje ovog problema najvaznije je nekako dodeliti takmicarima njihov Rang - poziciju, mesto na tabeli. To je lako ako svi takmicari imaju razlicit broj bodova. Medjutim, ako dva ili vise takmicara imaju isti broj bodova, kako njih rangirati?
Opcija 1:
1. Pera 18
2. Laza 16
3. Mika 16
4. Boba 12
ili Opcija 2:
1. Pera 18
2. Laza 16
2. Mika 16
4. Boba 12
ili Opcija 3:
1. Pera 18
2. Laza 16
2. Mika 16
3. Boba 12
Zato je tesko napisato kveri u Accesu. tesko, ali moguce. Najlakse se pise kveri za opciju 2:
Code:
QUery qryRazlika u zkacenom primeru:
SELECT A.Sifra, A.Ime, A.Bodovi, A.Bodovi - ( SELECT TOP 1
B.Bodovi
FROM Tbl_takMicari AS B
WHERE A.Bodovi > B.Bodovi
AND A.sifra <> B.Sifra
ORDER BY B.Bodovi DESC,B.Sifra ASC ) AS Razlika
FROM Tbl_takMicari AS A
ORDER BY A.Bodovi DESC , A.Sifra;
Za Opciju 2 stvari se komplikuju i resenje ide u pravcu u kom je krenuo Sloj.1973. Kod mene za to resenje postoji fiksna tabela,
tbl_takmicari_Sort, koju makro
mcrRazlika_SORT svaki put isprazni (qryDelete_SORT) i popuni potrebne podatke (qryAppendTo_SORT). Zatim se krajnji rezultat pokaze kverijem qryRazlika_SORT_A.
Upit
qryRazlika pokazuje razliku bodova u odnosu na prvog takmicara sa mnje bodova nego posmatrani.
Upit
qryRazlika_SORT_A pokazuje razliku bodova u odnosu na takmicara koji je na prvoj nizoj poziciji, pa makar imao i isti broj bodova (tada je razlika nula, zero). Kad dva takmicara imaju siti brij bodova, ja sam uzeo da onaj sa manjom sifrom ide na visu poziciju. Ovaj redosled se kontrolis u ORDER BY delu kverija
qryAppendTo_SORT.
Moguce je da postoji i resenje koje ne trazi pomocne tabele i akcione kverije, pogledacu pa cu javiti.
Ovo je ispalo teze nego sto sam ocekivao, zasluzuje cak da bude mozgalica: "Napisati SQL upit u Accessu, ili MS SQL 2000 i nizim verzijama, koji dodeljuje redne brojeve takmicarima u tabeli, vodeci racune o jednakom broju bodova". Zasluzuje, ali necemo da to pitamo.
:-)