ADO left join operatöründe DISTINCT Kullanımı

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,044
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,

Aşağıdaki kodda;
Hedef sayfasında yazan plaka bilgilerini, Plakalar sayfasında kontrol ederek tüm verileri getirmekte,
Buraya kadar her şey güzel, benim istediğim Şehir ve Şehir-2 alanları tekrar edenlerden sadece 1 satır getirsin.

AMASYA AMA-1
bu satırdan 2 adet var, Rapor sayfasına 1 kere yazsın

ANTALYA ANT-2
bu satırdan 3 adet var, Rapor sayfasına1 kere yazsın

Bu durumu nasıl sağlayabiliriz?

Kod:
Sub demememe22()
Dim myFile As String
Dim str As String

myFile = ThisWorkbook.FullName

Set con = VBA.CreateObject("adodb.Connection")

    strConnection = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "User ID=Admin;" & _
        "Data Source='" & myFile & "';" & _
        "Extended Properties=""Excel 12.0;hdr=yes"""


''str = "t2.[şehir], t2.[şehir2]"
str = "t2.*"
 
    sorgu = _
        "Select " & str & " from [hedef$] as t1 " & _
        "left join " & _
       " [Plakalar$] as t2 " & _
        "on t1.[plaka] = t2.[plaka]"

con.Open strConnection

Set RS = con.Execute(sorgu)

Sayfa2.Activate
Range("A2:B100000").ClearContents
Range("A2").CopyFromRecordset RS

End Sub
Teşekkürler,
iyi Çalışmalar.
 

Ekli dosyalar

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Merhaba,

Deneyiniz.
Kod:
    sorgu = _
        "Select distinct " & str & " from [hedef$] as t1 " & _
        "left join " & _
       " [Plakalar$] as t2 " & _
        "on t1.[plaka] = t2.[plaka]"

Not: Range("A2:B100000").ClearContents ... silme kodlarındaki aralığın sütununu B değil C olarak düzeltirsiniz.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,044
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,

Deneyiniz.
Kod:
    sorgu = _
        "Select distinct " & str & " from [hedef$] as t1 " & _
        "left join " & _
       " [Plakalar$] as t2 " & _
        "on t1.[plaka] = t2.[plaka]"

Not: Range("A2:B100000").ClearContents ... silme kodlarındaki aralığın sütununu B değil C olarak düzeltirsiniz.
Ömer Hocam teşekkürler,
bir konuda daha sorabilir miym?
Ekli dosya Plakalar sayfasında D sütununda "Satış" diye bir alan ekledim.
Bu işlemden sonra Rapor sayfasında bazı çoklu değerler artık teke düştü, "Satış" rakamlarının Toplam değerini de Rapor sayfasında D sütununa nasıl getirebiliriz?
  • AMA-1: 4
  • AMA-1: 3
AMA-1 için Toplam (4+3)= 7 değerini getirecek. Aynı anda olmasına gerek yok, birinci işlemi bitirdikten sonra bunu ikinci bir süreçte de yapabilir.

Bunun için aşağıdaki sorguyu oluşturdum ama; her zaman doğru sonucu verip veremeyeceğinden emin olamadım.
Kod:
    sorgu = _
           "SELECT Sum(t2.[Satis])AS Toplam_Deger from [Rapor$] as t1 " & _
           "left join " & _
           " [Plakalar$] as t2 " & _
           "on t1.[Şehir2] = t2.[Şehir2] " & _
           "GROUP BY t2.[Şehir2]"
iyi günler, iyi Çalışmalar.
 

Ekli dosyalar

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Deneyiniz.
Kod:
Sub test()

    Dim myFile As String, str As String, sorgu As String, strConnection As String
    Dim rs As Object, con As Object
    
    myFile = ThisWorkbook.FullName
    
    Set con = VBA.CreateObject("adodb.Connection")
    
    strConnection = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "User ID=Admin;" & _
        "Data Source='" & myFile & "';" & _
        "Extended Properties=""Excel 12.0;hdr=yes"""
            
    str = "t2.[Plaka], t2.[şehir], t2.[şehir2]"
    
    sorgu = _
        "Select " & str & ",sum(t2.[Satis]) from [hedef$] as t1 " & _
        "left join " & _
        " [Plakalar$] as t2 " & _
        "on t1.[plaka] = t2.[plaka]" & _
        "group by " & str
   
    con.Open strConnection
    
    Set rs = con.Execute(sorgu)
    
    Sayfa2.Activate
    Range("A2:D" & Rows.Count).ClearContents
    Range("A2").CopyFromRecordset rs

End Sub
 

yusuf1284

Altın Üye
Katılım
17 Ocak 2015
Mesajlar
224
Excel Vers. ve Dili
Office Pro 2016 TR
Altın Üyelik Bitiş Tarihi
09-02-2028
Ayrı konu açmak istemedim düzensiz verilerde ve düzensiz kapalı dosyada Left Join nasıl kullanabiliriz basit bir kaç örnek yapabilir misiniz? Baya aradım bulamadım sayfada
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Düzensiz dediğiniz dosyalar için örnek paylaşırsanız belki yardımcı olabiliriz.
 

yusuf1284

Altın Üye
Katılım
17 Ocak 2015
Mesajlar
224
Excel Vers. ve Dili
Office Pro 2016 TR
Altın Üyelik Bitiş Tarihi
09-02-2028
Hücre aralığı belirterek hocam
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bağlantı (Connection) satırında aşağıdaki bölümde bold olan kısımda YES yazıyorsa ADO sayfadaki tabloyu kendi algılayacaktır.

"Extended Properties=""Excel 12.0;hdr=yes"""

Bu bölüme NO yazarsanız alttaki sorgu satırında hücre adresi vererek işlem yapabilirsiniz. Tabi bu durumda sütun başlıkları yerine F1,F2 şeklinde ifadeler kullanmanız gerekecektir.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Not:

"Hdr= Yes" kullanildiginda alan (sutun) basliklari ve hucre araligi kullanilabilir.


.
 

yusuf1284

Altın Üye
Katılım
17 Ocak 2015
Mesajlar
224
Excel Vers. ve Dili
Office Pro 2016 TR
Altın Üyelik Bitiş Tarihi
09-02-2028
Hocam şu şekilde olduğunu düşünün
Kod:
  strFile1 = "D:\Excel\ADODB(ActiveX Data Objects)\ExcelLeftJoin\File1.xlsx"
  strFile2 = "D:\Excel\ADODB(ActiveX Data Objects)\ExcelLeftJoin\File2.xlsx"
 
  strSheet1 = "Sheet1"
  strSheet2 = "Sheet2"
  strRange1 = "A1:C10"
  strRange2 = "A1:B5"
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Neyi nereye getirmek istiyorsunuz?

Ek olarak tanımlama şeklinde vermek yerine Altın Üye olduğunuz için iki örnek dosya paylaşabilirsiniz.
 

yusuf1284

Altın Üye
Katılım
17 Ocak 2015
Mesajlar
224
Excel Vers. ve Dili
Office Pro 2016 TR
Altın Üyelik Bitiş Tarihi
09-02-2028
Kusuruma bakmayın hocam Örnek dosya oluşturmamıştım. Sadece örnek kod olsun diye sormuştum zamanım olduğunda oluşturayım hocam.
 
Son düzenleme:
Üst