• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

SQL birden fazla kayıt sıralama

  • Konbuyu başlatan Konbuyu başlatan My_Dog
  • Başlangıç tarihi Başlangıç tarihi
Katılım
18 Aralık 2006
Mesajlar
28
Excel Vers. ve Dili
2003
SQL hakkında bir sorum olacaktı. Güvenebildiğim ve en hızlı cevabı alabildiğim tek adres burası. Onun için soruyu sorabileceğim tek alanın burası olduğunu düşündüm. Eğer yanlış bir konu açtıysam özür dilerim herkesten.
Sorunum şu. Veritabanında SQL ile sorgu yaptığımda tabloda aynı kayıttan birden fazla olanların listelenmesini istiyorum. Bunun için nasıl bir komut yazabilirim?
 
Böyle sql de hazır bir fonksiyon varmıdır.Onu bilemiyecem ama işin içine vba'da katarak bunu elde edebilirsiniz.Formunuza bir tane listbox koyun.en az 2 sütun olsun.recordsetide aşağıdaki gibi kullanarak.
db'den 2nci sütundan veriler sorgulanıyor.1deb fazla olanlar listboxta listeleniyor.
Kod:
rs.Open "Select * from tablonuz;", baglantiniz, adOpenDynamic, adLockReadOnly
rs.MoveFirst
Do While Not rs.EOF
    If Not z.exists(rs(1)) Then
        z.Add rs(1), 1
    Else
        z.Item(rs(1)) = z.Item(rs(1)) + 1
    End If
    rs.MoveNext
Loop
For Each vKey In z.keys
    If z.Item(vKey) = 1 Then
        z.Remove (vKey)
    End If
Next vKey
With Me.ListBox1
    .Clear
    .ColumnCount = 2
    .ColumnWidths = "50;30"
    .List() = Application.Transpose(Array(z.keys, z.items))
End With
Set z = Nothing
rs.close
baglantiniz.close
set rs=nothing
set baglantiniz = nothing
 
dostum çok teşekkür ederim yanıtın için öncelikle. Ama ben oracle veritabanı mantığına göre sql sorgusu yapacağım için bu sorgu ile ayrı nitelikler taşımaktadır. Oracle veritabanı mantığına göre yardımcı olma şansınız varmı?
 
dostum çok teşekkür ederim yanıtın için öncelikle. Ama ben oracle veritabanı mantığına göre sql sorgusu yapacağım için bu sorgu ile ayrı nitelikler taşımaktadır. Oracle veritabanı mantığına göre yardımcı olma şansınız varmı?
Veritabanınız ne olduğu farkedeceğini sanmıyorum.SQL komutlarının fazla bir şey değişceğini sanmıyorum.Kendi sizteminize göre ayarlarsanız sorun kalmaz.Siz bunu excelde kullanmayacakmısınız.Eğer exceld eacseste veya vb de kullanacaksanız aşağıda yazdığım vb kodları işinizi görür ama başka bir dilde kullanacaksanız sql komutları dışında diğer dilde bu kodun nasıl yazılacağını bilmiyorum.:cool:
 
Bence çok zor bir istek. Senin tablonda belki 10 belkide 15 sutun olabilir. Bunların hepsinin birebir aynı olan kayıtlar senin istediklerindir anladığım kadarıyla. Ne amaçla kullanacağında önemli , basit amaçlı mükerrer kayıt olup olmadığınımı denetleyeceksin yoksa bu tür listelermi alman gerekiyor. Evren Beyin dediği gibi exceldemi kullanacaksın yoksa bir programlama dilindemi?
 
başka bir programlama dilinde yani oracle veritabanında kullanacağım. sütun değil tek bir sütunda bulunan birden fazla aynı isimde olan kayıtların listelenmesi için bir sorgu komutu arıyorum?
 
başka bir programlama dilinde yani oracle veritabanında kullanacağım. sütun değil tek bir sütunda bulunan birden fazla aynı isimde olan kayıtların listelenmesi için bir sorgu komutu arıyorum?
1 tane olanlarda listelenecekmi?Yoksa sadece 1den fala olanlarmı listelenecek.Eğer tüm kayıtları mükerre olmayacak şekilde alıcam derseniz onun sql sorgusu var.Onu yaparım.Ama sadece 1 den fazla olanları istiyorum derseniz onu bilemiyecem.Ama bu konuda çok iyi olna arkadaşlarda var aramızda .Şu anda yoklar ama gelince bakarlar sanırım.
 
şu şekilde anlatayım hocam belirtilen tabloda ve sutünda örneğin a tablosunun b sütunundaki kayıtların içinde adı iki veya daha fazla geçenler listelenecek. tek olanlar listelenmeyecek. böyle bi sorguyu nasıl yapabilirim? internetten araştırdım biraz COUNT komutuyla bunun yapılacağının fakat nasıl bir komut yazacağımı çözemedim.
 
select ad, count (ad) as sayi from Table1 GROUP BY ad

Bu sorgu en azından tüm kayıtlarından herbirinin kaç adet kaydedildiğini gösterir. Örneğin Ahmetten iki tane ise

ad sayi
Ahmet 2

şeklinde sonuç verir. Ama 1 tane olanlarıda verir. onun içinde sayi sutununda 1 e eşit olmayanları listelmeye çalıştım ama olmadı. Belki bu haliyle işini görebilir.
 
Merhaba,

select ad, count (ad) as sayi from Table1 GROUP BY ad

Bu sorgu en azından tüm kayıtlarından herbirinin kaç adet kaydedildiğini gösterir. Örneğin Ahmetten iki tane ise

ad sayi
Ahmet 2

şeklinde sonuç verir. Ama 1 tane olanlarıda verir. onun içinde sayi sutununda 1 e eşit olmayanları listelmeye çalıştım ama olmadı. Belki bu haliyle işini görebilir.

Cevaba çok yaklaşmışsınız sayın Zahir. ;)
Madem ki bu sorgu her bir adın "sayısı" nı veriyor, bu durumda bu sorgunun sonucunu filitreyebiliriz...

Kod:
SELECT *
  FROM 
    (SELECT ad, count (ad) AS sayi
       FROM Table1
        GROUP BY ad) AS tmp
    WHERE tmp.sayi > 1;
 
Ben zaten Zeki hocamın bunu yapacağını biliyordum. ;)
Teşekkürler zeki hocam
 
Merhaba,

Bende işyerinde denedim çalıştı.

Kod:
select * from ORNEKTABLO
where ad in
(select ad from ORNEKTABLO group by ad having count(*)>1 )
 
Necdet hocam süper kod.
Teşekkürler.:D
 
E sizlerin yanında amatör kalan biri olarak bende alkışı haketmedim mi acaba sonuca yaklaştım nede olsa :)

Sayın Necdet Hocanın kodu sanırım arkadaşın tam istediği gibi ve şapka çıkartmak lazım bu koda.

Sayın Zeki Hocamızın verdiği kodun sonucuna ulaşacak bir kod üzerinde akşam çok çalışmıştım ama olmamıştı.
Bana göre "SELECT ad, count (ad) AS sayi FROM Table1 GROUP BY ad having sayi > 1" cümleciği de bu sonucu vermeliydi ancak sayi sutunu için geçersiz uyarısı verdi. Oysaki Necdet Hocamızın parantez içerisindeki cümleciği ile neredeyse aynı. Sizce bu kodun çalışmama sebebi nedir?
 
Bana göre "SELECT ad, count (ad) AS sayi FROM Table1 GROUP BY ad having sayi > 1" cümleciği de bu sonucu vermeliydi ancak sayi sutunu için geçersiz uyarısı verdi. Oysaki Necdet Hocamızın parantez içerisindeki cümleciği ile neredeyse aynı. Sizce bu kodun çalışmama sebebi nedir?

Merhaba..

Sorgunuzda bulunan having yan cümlesindeki sayi değerini tekrardan oluşturduğunuzda istenileni verir..:

select ad, count(ad) as sayi
from table1
group by ad
having count(ad)>1
 
Geri
Üst