• DİKKAT

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

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

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,201
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

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.
 
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

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
 
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
 
Düzensiz dediğiniz dosyalar için örnek paylaşırsanız belki yardımcı olabiliriz.
 
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.
 
Not:

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


.
 
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"
 
Neyi nereye getirmek istiyorsunuz?

Ek olarak tanımlama şeklinde vermek yerine Altın Üye olduğunuz için iki örnek dosya paylaşabilirsiniz.
 
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:
Geri
Üst