Sql Sorgusunda TOP kullanımı

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,039
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,
Öncelikle Ülkemiz için geçmiş olsun, Bu deprem afetinden dolayı hayatını kaybeden vatandaşlarımıza Allah’tan rahmet, yaralananlara ve halen enkaz altında bulunanlara acil şifa ve sabır diliyorum.

SQL SELECT TOP Kullanımında ; aşağıdaki kodda ilk 15 veriyi getirmesi gerekirken 17 veriyi getirmekte;

bunun sebebi hikmeti ne olabilir? sorgunun başına TOP yazdığımızda her şekilde 15' te sınırlaması gerekmiyor mu?

örnek dosyayı ekliyorum, ilginiz için şimdiden teşekkürler,

Kod:
yol = ThisWorkbook.FullName

Set Con = CreateObject("ADODB.Connection")

Con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
   yol & ";extended properties=""Excel 12.0;hdr=yes"""
  
' ' - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Set RS2 = CreateObject("ADODB.RecordSet")

Sql2 = "Select DISTINCT TOP 15 Brand, SUM(Frequency) As Toplam FROM [Data$A5:D" & LR & "]" & _
" Where Brand Not Like 'NO BRAND' GROUP BY Brand ORDER BY SUM(Frequency) DESC"
' ' - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RS2.Open Sql2, Con, 1, 3

ab2 = RS2.RecordCount

'''veri = RS2.GetRows

Sht.Range("B8").CopyFromRecordset RS2
 

Ekli dosyalar

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Aynı toplamda oldukları için geliyordur.
Sonuçları döngü ile yazdırıyorsanız , döngüye müdahale edin.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,039
Excel Vers. ve Dili
Office 2013 İngilizce
Aynı toplamda oldukları için geliyordur.
Sonuçları döngü ile yazdırıyorsanız , döngüye müdahale edin.
Erdem Hocam anlamayadım, dosya üzerinde gösterebilirseniz sevinirim

ikinci olarak herhangi bir döngü mevcut değil
Kod:
Sht.Range("B8").CopyFromRecordset RS2
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
İlk eklediğiniz dosya' da sonuçları döngü ile yazdırıyorsunuz.
İkinci eklediğiniz dosya'da zaten görünüyor. 13 sonucu sonda 3 kere var.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,039
Excel Vers. ve Dili
Office 2013 İngilizce
İlk eklediğiniz dosya' da sonuçları döngü ile yazdırıyorsunuz.
İkinci eklediğiniz dosya'da zaten görünüyor. 13 sonucu sonda 3 kere var.
Erdem Hocam teşekkürler,

şimdi anladım, 13 sonucu 3 defa olduğu için tamamını yazdırana kadar devam ediyor,

şöylemi anlamalıyız 13 sonucu 4 defa olsaydı 18 sonuç getirecekti.

peki böyle durumlarda her hâlükârda 15 ' te kes demek için nasıl bir yöntem izleyebiliriz?
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Sonuçları döngü ile yazdırıyorsanız, döngüde exit sub yapabilirsiniz.
Tek seferde yazdırmak istiyorsanız aşağıdaki gibi olabilir.

Kod:
Sql2 = "select top 15 * from (Select DISTINCT TOP 15 Brand, SUM(Frequency) As Toplam FROM [Data$A5:D" & LR & "]" & _
" Where Brand Not Like 'NO BRAND' GROUP BY Brand ORDER BY SUM(Frequency) DESC)"
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,039
Excel Vers. ve Dili
Office 2013 İngilizce
Sonuçları döngü ile yazdırıyorsanız, döngüde exit sub yapabilirsiniz.
Tek seferde yazdırmak istiyorsanız aşağıdaki gibi olabilir.

Kod:
Sql2 = "select top 15 * from (Select DISTINCT TOP 15 Brand, SUM(Frequency) As Toplam FROM [Data$A5:D" & LR & "]" & _
" Where Brand Not Like 'NO BRAND' GROUP BY Brand ORDER BY SUM(Frequency) DESC)"
Çok teşekkürler Erdem, Hocam iyiki varsınız
 
Üst