sql de belirli kayit araligini listelemek

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

sql de belirli kayit araligini listelemek

Mesaj gönderen tayipk »

]Herkese merhaba arkadaşlar. Ben SQL de bir tabloyu 200 kayit 200 kayıt çağırmak istiyorum. Yanı ilk sayfaya ilk 200 kayıt sonraki sayfaya da 201 ile 400 arası kayıtları çağırmak istiyorum. Bu konuda yardımlarınıza ihtiyacım bulunmakta. SQL 2008 sürümü kullanmaktayim.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: sql de belirli kayit araligini listelemek

Mesaj gönderen mrmarman »

Select top 200 ile almayı biliyorsundur.

Select'in where kısmına bir sub select ile aynı selecti verip "not in" şartına bağlarsan ilk 200 pass geçilip ikinci 200 gelir.

Tabi subselect kısmında top ifadesi bir sayfa eksik olacağından sayfa içerik sayısı olan 200 eksilteceksin
Resim
Resim ....Resim
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: sql de belirli kayit araligini listelemek

Mesaj gönderen tayipk »

Muharrem hocam rica etsem küçük bir ornek kod verebilir misiniz?
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: sql de belirli kayit araligini listelemek

Mesaj gönderen mrmarman »

Kod: Tümünü seç

     SQL.Add('SELECT Count(*) AS KayitSay FROM Tablo');
ile kayıt sayını öğren... Sayfalara böleceksin ya kaç sayfa olduğunu ön görmeni sağlar. Sonra bunları da mesela Örnek olarak sayfada 10'ar eleman görmek istiyoruz diyelim

Kod: Tümünü seç

       ComboBox1.Items.Text := '<Sayfa seçiniz...>';
       for i := 1 to FieldByName( 'KayitSay' ).AsInteger div 10
         do ComboBox1.Items.Add(Format( 'Sayfa %.2d', [i]) );
.. gibisinden bir ComboBox'a koyarsın. Kişi kaçıncı sayfayı istiyorsa onu seçebilsin diye...

ComboBox OnChange olayında hangi sayfa istediğini anlar :

Kod: Tümünü seç

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  if ComboBox1.ItemIndex > 0 then
   With AdoQuery1 do
   begin
     Active := False;
     SQL.Clear;
     SQL.Add('SELECT TOP 10 * FROM Tablo');
     if ComboBox1.ItemIndex > 1 then // ilk sayfadan sonrakileri filtreleyeceğiz...
       SQL.Add('WHERE KaySiraNo NOT IN ( SELECT TOP '+ IntToStr(ComboBox1.ItemIndex * 10) +'  KaySiraNo FROM Tablo )');
     Active := True;
   end;
end;
İle ilgili 10'luk kayıt görüntülenmiş olur.
Resim
Resim ....Resim
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: sql de belirli kayit araligini listelemek

Mesaj gönderen tayipk »

muharrem hocam yardımınız için teşekkür ederim aşağıdaki şekilde sorunumu çözmüş bulunmaktayım. çok sağolun. benim gibi ihtiyacı olan arkadaşlar bu kodlardan faydalanabilirler.

Kod: Tümünü seç

WITH Yeni_Tablo AS
(
    SELECT IdUrun, UrunAdi,Barkod,
    ROW_NUMBER() OVER (ORDER BY Idurun ASC) AS kayit
    FROM Urun 
) 
SELECT IdUrun,UrunAdi,Barkod,kayit  
FROM Yeni_Tablo
WHERE kayit BETWEEN 201 AND 400
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Cevapla