AccessTr.neT

Tam Versiyon: Alan Değerine Göre Yinelenen Kayıtlar Oluşturmak – Tally Table Yöntemi
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Tally Table, Çetele Tablosu olarak Türkçeleştirebileceğimiz sayısal bir tablodur. Kaynak tablodaki her bir öğenin miktarını göstermek için çetele işaretleri kullanarak verileri düzenleme tekniği Tally Table olarak adlandırılır.

Örnek verecek olursak
[Resim: do.php?img=11348]

Şeklinde bir ürün kayıtlarının olduğu tbl_Urun  adlı bir tablomuz olduğunu kabul edelim. Bu tablodan hareket ile her bir ürünün adedi miktarınca tekrar kayıt oluşturmak sureti ile yeni bir tablo oluşturmak istediğimizi kabul edelim. Oluşturulacak yeni tablo

[Resim: do.php?img=11349]

Şeklinde olacaktır.

Bunu bir sorgu yardımı ile yapabilmek için Tally Table adını verdiğimiz bir yardımcı tablodan destek alırız.Bunun için:

id adlı tek bir alandan oluşan tbl_Tally adlı bir tablo oluşturup id alanı veri türünü Sayı ve alan boyutunu da Uzun Tamsayı olarak tanımlarız.

[Resim: do.php?img=11350]

Daha sonra tbl_Tally tablosuna 0’dan başlayarak 9 dahil tüm sayıları yazarak kaydederiz:

[Resim: do.php?img=11351]

Bu tablo üzerinden oluşturacağımız

select 10*n10.id+n1.id+1 as n from tbl_Tally n1, tbl_Tally n10

sorgusu 1’den 100’e kadar sayıların sırası ile yayılımını yaparak listelendiği bir sonuç;


select 100*n100.id+10*n10.id+n1.id+1 as n from tbl_Tally n1, tbl_Tally n10, tbl_Tally n100

sorgusu 1’den 1000’e kadar sayıların sırası ile yayılımını yaparak listelendiği bir sonuç;


select 1000*n1000.id+100*n100.id+10*n10.id+n1.id+1 as n from tbl_Tally n1, tbl_Tally n10, tbl_Tally n100, tbl_Tally n1000

sorgusu 1’den 10.000’e kadar sayıların sırası ile yayılımını yaparak listelendiği bir sonuç;


select 10000*n10000.id+1000*n1000.id+100*n100.id+10*n10.id+n1.id+1 as n from tbl_Tally n1, tbl_Tally n10, tbl_Tally n100, tbl_Tally n1000, tbl_Tally n10000

sorgusu 1’den 100.000’e kadar sayıların sırası ile yayılımını yaparak listelendiği bir sonuç döndürür.


Bu sayı tablosunu bir çapraz birleştirmenin parçası olarak, belirli sayıda kaydı döndürecek bir sorgu oluşturmak amacıyla kullanabiliriz. Örneğimizden hareket ederek tbl_Urun tablosundan elde edeceğimiz sonuç tablosu için oluşturacağımız sorgu (ekli örnek dosyasında qry_Tally adlı sorgu)

select tbl_Urun.* from tbl_Urun, (select 100*n100.id+10*n10.id+n1.id+1 as n from tbl_Tally n1, tbl_Tally n10, tbl_Tally n100) t where t.n <= tbl_Urun.[Adet] ORDER BY tbl_Urun.id

şeklinde olacaktır. Bu sorgu neticesinde elde edeceğimiz sonuç tablosu yukarıda manuel olarak kaydettiğimiz sonuç tablosu ile birebir aynı olacaktır. Anlatımların tamamı ekli dosyada basit olarak uygulanmış hali ile mevcut olup inceleyebilirsiniz.


Bu yöntem kullanılarak çözüm geliştirilmiş konu örneği : Etiket Yazdirma
Sayın @atoykan güzel bir paylaşım oldu. Teşekkürler.