Nëse të kuptova qartë, databaza do ruajë historinë e pagës së arsimtarëve gjatë gjithë muajve/viteve dhe nëse dikujt i rritet rroga në Qershor, ti nuk do që të ndryshojë historinë e rrogës që ai/ajo ka patur në muajt më parë.
Për të bërë këtë gjë, në databazë të duhet të kesh një tabelë që ruan rrogën e punëtorit dhe datën kur ajo rrogë hyri në fuqi. Më poshtë ke një shembull të tabelës së punëtorëve dhe tabelës së pagës. Aty mund të shikosh se punëtori me ID=1 (Edi) paguhej 1000 lekë në Janar 2001; 2000 lekë në Janar 2005; 2500 që prej Janarit 2006.
Kodi:
Tabela punetoret
Id emri
1 Edi
2 Sokoli
3 Majlinda
4 Petriti
5 Arbeni
Tabela paga
id_punetorit data paga
1 1/1/2001 $1,000.00
1 1/1/2005 $2,000.00
1 1/1/2006 $2,500.00
2 1/1/2005 $2,000.00
3 1/1/2005 $2,000.00
3 1/1/2006 $2,500.00
4 1/1/2004 $2,000.00
4 1/1/2005 $3,000.00
5 1/1/2005 $1,500.00
Tani, e zëmë se do të duhet të krijosh një raport për historinë e pagave për të gjithë punëtorët. Në SQL kërkesa do ishte:
Kodi:
SELECT punetoret.emri, paga.data, paga.paga
FROM punetoret INNER JOIN paga ON punetoret.id = paga.id_punetorit
ORDER BY punetoret.emri, paga.data;
emri data paga
Arbeni 1/1/2005 $1,500.00
Edi 1/1/2001 $1,000.00
Edi 1/1/2005 $2,000.00
Edi 1/1/2006 $2,500.00
Majlinda 1/1/2005 $2,000.00
Majlinda 1/1/2006 $2,500.00
Petriti 1/1/2004 $2,000.00
Petriti 1/1/2005 $3,000.00
Sokoli 1/1/2005 $2,000.00
Ose mund të duash një raport për vetëm një prej punëtorëve. Psh: Duam historinë e pagës së Edit (id=1).
Kodi:
SELECT punetoret.emri, paga.data, paga.paga
FROM punetoret INNER JOIN paga ON punetoret.id = paga.id_punetorit
WHERE (((punetoret.id)=1))
ORDER BY paga.data;
emri data paga
Edi 1/1/2001 $1,000.00
Edi 1/1/2005 $2,000.00
Edi 1/1/2006 $2,500.00
Mund të duash pagën e një punëtori në një muaj të caktuar.
psh: Duam pagën e Edit për muajin Gusht 2006. Kërkesën në SQL e formojmë duke kërkuar të gjitha pagat e Edit, pastaj marrim vetëm pagat me datë më herët se 08/2006, i rendisim sipas datës, dhe marrim rreshtin e parë të rezultatit (top 1) që është data e fundit kur Edi pati rritje page.
Kodi:
SELECT TOP 1 punetoret.emri, paga.data, paga.paga
FROM punetoret INNER JOIN paga ON punetoret.id = paga.id_punetorit
WHERE (((paga.data)<#8/1/2006#) AND ((punetoret.id)=1))
ORDER paga.data DESC;
emri data paga
Edi 1/1/2006 $2,500.00
Mund të duash të bësh të njëjtin raport si më lart, por për të gjithë punëtorët. Dmth, të dish pagën e të gjithë punëtorëve në një muaj të caktuar. Për këtë duhet të formosh një kërkesë më të avancuar duke bashkuar dy kërkesa në një të vetme.
Kodi:
SELECT First(punetoret.emri) AS emri, "1/8/2006" AS data,
First((SELECT TOP 1 paga.paga
FROM paga
WHERE (((paga.data)<#1/8/2006#)
AND ((paga.id_punetorit)=punetoret.id)) ORDER BY paga.data DESC)) AS paga
FROM punetoret INNER JOIN paga ON punetoret.id = paga.id_punetorit
GROUP BY punetoret.id
ORDER BY First(punetoret.emri);
emri data paga
Arbeni 1/8/2006 $1,500.00
Edi 1/8/2006 $2,500.00
Majlinda 1/8/2006 $2,500.00
Petriti 1/8/2006 $3,000.00
Sokoli 1/8/2006 $2,000.00
Më poshtë kam bashkëngjitur databazën shembull bashkë me tabelat dhe kërkesat e mësipërme. Unë përdora versionin American të Access 2003, prandaj mund të duhet të ndryshosh formatin e datave dhe pagave sipas vendit ku do e përdorësh.
Krijoni Kontakt