SQL DISTINCT Kullanımı

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Merhabalar,
Aşağıdaki gibi bir tabloda;
Adi_soyadi , Sehir alanlarına göre benzersiz değerleri alacak,
aşağıdaki kodda Adi_soyadi , Sehir benzersiz olarak geliyor, yalnız ben bunların yanında tüm alanların gelmesini istiyorum. bu esnada diğer alanlar dan ilk sırada olan veriler gelebilir.

Kod:
   strSQL = "SELECT DISTINCT [Adi_soyadi], [Sehir] From [Sayfa1$]"
Örnek olarak aşağıdaki tabloda İlhan ve İstanbul 2 farklı satırda ( 4. ve 8. satır) girildiği için, bu satırlardan ilk sıradaki ( 4. satır) alabilir.

Sonuç olarak 8. satırı iptal edecek, diğerlerini olduğu gibigetirecek


No

Adi_soyadi

Sehir

Bolum

Kodu

1

Salih

İstanbul

Bilgi İşlem Sorumlusu

1234567​

2

Ayhan

Kocaeli

İdari İşler Yöneticisi

2345678​

3

Serkan

Erzincan

Muhasebe

3456789​

4

İlhan

İstanbul

Bİlgi İşlem Sorumlusu

4567900​

5

Salih

Kocaeli

Bilgi İşlem Sorumlusu

5679011​

6

Ayhan

Erzincan

İdari İşler Yöneticisi

6790122​

7

Serkan

İstanbul

Muhasebe

7901233​

8

İlhan

İstanbul

Muhasebe

9012344​




yardımlarınız için şimdiden teşekkürler
iyi Çalışmalar.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
Kod:
    Sql = "SELECT FIRST([No]), Adi_soyadi, Sehir, FIRST(Bolum), FIRST(Kodu) FROM [Data$A:E] " & _
          "GROUP BY Adi_soyadi,sehir ORDER BY FIRST([No])"
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Kod:
    Sql = "SELECT FIRST([No]), Adi_soyadi, Sehir, FIRST(Bolum), FIRST(Kodu) FROM [Data$A:E] " & _
          "GROUP BY Adi_soyadi,sehir ORDER BY FIRST([No])"
Veysel Hocam çok teşekkürler,

Burada şöyle bir durum söz konusu olabilir mi? buraya tüm alanlarının adını tek-tek yazmak yerine tüm alanları (*) al,
yada Adi_soyadi, Sehir dışında kalan tüm alanları FIRST(...) olarak değerlendir gibi...

Kod:
"SELECT FIRST([No]), Adi_soyadi, Sehir, FIRST(Bolum), FIRST(Kodu) FROM"
çünkü asıl tabloda alan sayısı epey fazla, alan adlarının hepsini tek-tek belirtmek zahmetli olabiliyor. tabiki mümkünatı varsa;

tekrar teşekkürler,
iyi çalışmalar.
 
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
alan adlarının hepsini tek-tek belirtmek zahmetli olabiliyor. tabiki mümkünatı varsa;
Bir değişken ekleyin.
Sütun adları için bir döngü kurun.
Döngüde değişkeni , ile first i birleştirin.
En sonda sorguda " & degisken & " olarak yazarsınız.
Biraz uğraşırsanız bence yaparsınız.
Ben mobilden bukadar tarif edebildim dosyayı deneyemediğim için.
Kısaca oluyor yani bende kendim için yapmıştım ordan biliyorum.
 
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
Sadece mantığı anlamanız için kısa bir kod yazdım dediğim gibi döngüyü anlamanız için.

A dan E ye badar baslıklar Baslik1,Baslik2.... gibi olduğunu varsayarsak alttaki kod çalışıyor.

C#:
     Dim metin As String
    
    Set con = CreateObject("Adodb.connection")
    Set rs = CreateObject("Adodb.recordset")
    con.Open "provider=microsoft.ace.oledb.12.0;data source= " & ThisWorkbook.FullName & " ;extended properties= ""Excel 12.0;hdr=yes;imex=1"""

    For i = 3 To 5 'Baslik icin C den E ye kadar
        metin = metin & "First(" & Cells(1, i).Value & "),"
    Next
    metin = Mid(metin, 1, Len(metin) - 1)
 
    Sql = "select [Baslik1],[Baslik2], " & metin & "  from [Sayfa1$] group by [Baslik1],[Baslik2]"

    rs.Open Sql, con, 1, 3
    Me.ListBox1.Column = rs.getrows
 
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
Denediğim şekilde resimdeki gibi.

 
Üst