Tabele:
[ARTIKLI]
id_artikla int,
naziv_artikla nvarchar(50)
grupa char(5),
podgrupa char(5),
[RABATI]
id_komitenta int,
id_artikla int,
grupa char(5),
podgrupa char(5),
rabat numeric
U tabeli [RABATI] se nalaze rabati za pojedine artikle ka nekom komitentu. Dakle, ne moraju dva komitenta imati iste rabati za jedan artikal.
Cim otvorimo novog komitenta (u trecoj tabeli, ovde nije bitna), dajemo inicijalni rabat koji se upisuje u tabelu [RABATI] kao:
<id_komitenta1>, NULL, NULL, NULL, <rabat1>
Da stvar bude gora, imamo i grupe i podgrupe artikala koji se nude kao pomoc u radu sa artiklima. Ako se zada rabat 5% jednoj grupi artikala za komitenta X, a potom se izvuce artikal A, i da se rabat 10% samo za taj artikal (a on slucajno pripada onoj grupi artikala koja je gore navedena), trebalo bi da rezultat bude da svi artikli iz grupe, osim artikla A, imaju 5% rabati, a artikal A 10% rabati.
Dakle, prioritet ima niza, preciznija odrednica. Ako trazim tacno rabat za jedan artikal prema jednom komitentu, trazicu sledecim redosledom:
1. da li postoji u tabeli [RABATI] slog sa id_komitent i id_artikla kojeg zelim. Ako postoji, uzimam taj rabat i zavrsavam posao
2. da li postoji u tabeli [RABATI] slog sa id_komitent i podgrupa (ona kojoj pripada artikal) koje zelim, ako ima, uzimam rabat i gotovo
3. da li postoji u tabeli [RABATI] slog sa id_komitent i grupa (ona kojoj pripada artikal) koje zelim, ako ima, uzimam rabat i gotovo
4. uzimam iz tabele rabat koja se pruza tom komitentu, mimo svih ostalih kriterijuma (dakle, to mi je neka DEFAULT vrednost, ona unesena prilikom kreiranja samog komitenta)
Ideja je napraviti sproc (koristim sql server 2005) kojem se prosledjuju parametri
@id_artikla = null,
@id_komitenta = null,
@grupa = null,
@podgrupa = null,
(dakle, DEFAULT vrednosti su NULL)
koja ce:
1. ako joj se prosledi samo id_artikla, naci sve njene rabati po kojima se prosledjuje svim komitentima
2. ako joj se prosledi samo komitent, naci sve artikle sa rabatima koje idu tom komitentu
3. grupa, podgrupa, to su specijalni slucajevi ovog gore
Problem je izdvojiti slucajeve, a nikako to ne uspevam da uradim selectom i joinom. Postoje artikli koji ne pripadaju nijednoj podgrupi ili grupi, a zatim, postoje podgrupe i grupe kojima nije eksplicitno data rabat u tabeli vec se oslanjaju na default vrednost.
Ubedljivo najgora zamisao mi je da idem petljom ili CURSORom kroz artikle i pitam ih "hej, da li ima rabat za tebe? nema!? ok, kojoj podgrupi pripadas? Da li ima rabat za nju?..." Nadam se da neko ima neku bolju zamisao mozda koriscenje neke funkcije koju ja ne znam (padala mi je na um COALESCE, ali... pf...)
Umoram sam, idem kuci, sad kad citam sta sam vam ovde napisao, nije ni meni najjasnije, valjda ce neko biti odmorniji, pa ce makar malo razmisliti o problemu