Access veritabanında SQL sorgularda, dönen kayıtlara otomatik bir numara atanması işlemi için bir komut yoktur. Ve bu özelliğe çoğu kez ihtiyaç duyulur.
Mesela, aylar önce de bu işleve ihtiyaç duymuştum; ancak hayli araştırmama rağmen, tam istediğim şeyi bulamamıştım. Yine de farklı yollarla işimi görmüştüm.
Ve bugün yine böyle bir fonksiyona gereksinim duydum. Ve araştırmaya başladım...
Saatler sonra tam olmasa da, olumlu anlamda bazı sonuçlar elde edebilmiştim.
Örnekleyerek ilerleyeyim.
Aşağıdaki kullanımda, tblUser tablosundan FirstName ve LastName alanları alınıyor. (Tablomuzda 4 adet kayıt olduğunu düşünelim)
SELECT FirstName, LastName FROM tblUser;
Sonuç aşağıdaki gibi olacaktır.
Mustafa |
Birgin |
Mürsel |
Işık |
Mehmet |
Can |
Nisan |
Kumru |
Şimdi, ayrı bir sütun olarak, kayıt sıra numarasını da sonuç tablosuna ekleyelim.
SELECT FirstName, LastName, (SELECT Count(LastName)+1 FROM tblUser AS Tablo1 WHERE Tablo1.ID < Tablo2.ID) AS RowNumber FROM tblUser AS Tablo2;
Mustafa |
Birgin |
1 |
Mürsel |
Işık |
2 |
Mehmet |
Can |
3 |
Nisan |
Kumru |
4 |
İşi bir adım daha öteleyelim ve belli bir aralıktaki kayıtları döndürmek isteyelim.
Mesela, yüzlerce kaydı bir GridView nesnesinde, sayfalama kullanırken görüntülerken; tüm kullanıcıları her defasında çekmek yerine, sadece istenenen sayfadaki kayıtları çekmek daha uygun olacaktır.
Diyelim ki, tablomuzda 2210 kayıt olsun ve GridView kontrolünde her sayfada 100 kayıt listeleniyor olsun. Bu durumda 23 sayfa numaramız olacaktır.
Sözgelimi 8. sayfayı görüntülemek istiyorsak aşağıdaki kullanıma başvurabiliriz.
SELECT * FROM (SELECT (SELECT Count(LastName)+1 FROM tblUser AS Tablo1 WHERE Tablo1.ID < Tablo2.ID) As RowNumber, FirstName, LastName FROM tblUser AS Tablo2)
WHERE RowNumber>700 AND RowNumber<801 ORDER BY RowNumber
Bulduğum yukarıdaki kullanımda, dönen sonuçlara numara atanmıyor ama, kayıtların tablodaki sıra numaraları dönüyor.
Tabloda otomatik artan bir ID alanı oluşturulursa, zaten aynı işi görür, diye düşünülebilir. Ancak ilgili tabloda bazı kayıtlar silindiğinde, ID alanında aralarda bazı değerler atlanmış olur. Bu nedenle yukarıdaki yönteme başvurulabilir.
Yine de, dönen sonuçlara da numara verilipp o numaralara göre işlem yapılabilseydi çok daha güzel olurdu.
Yararlı olması dileğiyle...
Not: Buradaki denemeler Access 2003 bir veritabanı üzerinde yapılmıştır.
Yaralanılan Kaynak:
http://groups.google.com/group/comp.databases.ms-access/browse_frm/thread/db227be5c3a2d2bb/cdb73e9bfb888698