SQL Server N. satırdaki kaydı almak
#1
Merhaba arkadaşlar;

Geçenlerde Access için bir soru vardı çok güzel ve ilginç bir soruydu. Farklı sıralanmış " Order By len(alan_ismi)" şeklindeydi ve bu sıralamaya göre oluşan sorgudan N. kaydı görmek istiyordu. Bu sıralama aynı şekilde random da olabilirdi. Taruz büyük bir ustalıkla bunu yaptı, ben de Sql server için yapayım dedim ve 2 benzer CURSOR ile yaptım..

1. yol ..

SQL
  1. USE Sirket_Test
  2. GO
  3.  
  4. DECLARE N_kayit_bul SCROLL CURSOR FOR
  5. SELECT * FROM personel ORDER BY len(Ad)
  6.  
  7. OPEN N_kayit_bul
  8. FETCH ABSOLUTE 10 FROM N_kayit_bul
  9. -- Buradaki 10, almak istediğimiz satırdır. 10. satır yani
  10.  
  11. CLOSE N_kayit_bul
  12. -- Cursoru kapatıyoruz
  13. DEALLOCATE N_kayit_bul
  14. -- Kaynakları serbest bırakıyoruz




2. Yol;

SQL
  1. DECLARE bb cursor static FOR
  2. SELECT *
  3. FROM PERSONEL ORDER BY len(Ad)
  4. OPEN global bb
  5. fetch absolute 10 FROM bb
  6.  
  7. close global bb
  8. deallocate global bb



Not: Cursor kullanmak dikkat ister ve sistem kaynaklarını fazlaca tüketebilir. Burada eğer sıralama olayı normal bir şekilde olsaydı yani otoID(personelNo) alanına göre diyelim alttaki gibi bir SQL cümlesi de işimizi görecekti.

SQL
  1. SELECT * FROM personel AS bb WHERE (SELECT COUNT(*)
  2. FROM personel WHERE PersonelNo <=bb.PersonelNo )=10




Ayrıca "Row_Number" fonksiyonunu da kullanbiliriz ama bu tür spesifik sıralamlarda denemedim, gerek de duymadım.
Javascript
  1. this.setState({sign:"Here comes the sun...."})







  Alıntı
Bu mesajı beğenenler:
#2
Sql Server farkı da bu zaten.. Accesste bu tür sorgulamalarda deveye hendek atlatıyoruz tabiri caizse.. Wink

Teşekkürler Berkant..



  Alıntı
Bu mesajı beğenenler:
#3
Sayın Berkant Öztürk
Çok güzel ve ilginç bir Cursor örneği olmuş.
Sql ile ilgili paylaşımlarınızı heyecanla bekliyoruz.
Saygılarımla.



  Alıntı
Bu mesajı beğenenler:
#4
bende şöyle ekleyeyim. hiç cursor olayına girmeden şu şekilde de istediğimiz n kayıt aralığını alabiliriz.

SQL
  1. WITH TPersonel AS (
  2. SELECT ROW_NUMBER() OVER(ORDER BY len(Ad)) AS ROW,*
  3. FROM personel
  4. )
  5.  
  6. SELECT * FROM TPersonel
  7. WHERE ROW BETWEEN 10 AND 50





  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Sql Server Sorunu :( ferkuu 1 427 27-06-2022, 14:15
Son Mesaj: adnnfrm
  Sqlite Browser Iki Tarih Arası Farkı Saniye Cinsinde Almak footprinting 7 1.634 15-06-2021, 21:38
Son Mesaj: footprinting
  Sql Pıvot Table Da Kolon Toplamı Almak Arkadasca 0 602 14-06-2021, 13:58
Son Mesaj: Arkadasca
  Sql Server - Access Arayüzü benuva 15 2.951 20-11-2019, 08:30
Son Mesaj: akd27
  Sql Server Diagram Hatası benuva 1 761 15-11-2019, 11:53
Son Mesaj: benuva
  sql server 2012 expres ile bir access veri tabanını ağda paylaşma sercann 0 1.042 08-01-2019, 23:23
Son Mesaj: sercann
  Microsoft SQL Server Hatası PHEADRUS 2 1.454 21-04-2018, 11:01
Son Mesaj: PHEADRUS
  sql server tablosunda otomatik satır silme hedefkaya 0 1.867 06-11-2016, 18:26
Son Mesaj: hedefkaya

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi