SQL Cümle en büyük değer

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Kolay gelsin.
A sütunundan isim B de soyisim C de yaş mevcut bir tablo var.
Aşağıdaki kodlar ile içerisinde al geçen isimleri alıyorum. 2. bir şart daha ekleyip. Bulduğu değerlerden en büyük veya en küçük yaşta olanı bulabilir mi?
Not: Sql kısmını öğrenmek için internetteki örneklerden bakarak anlamaya çalışıyorum.

Kod:
Sub RunSELECT()
    Dim cn As Object, rs As Object, output As String, sql As String
    
    '---Connecting to the Data Source---
    Set cn = CreateObject("ADODB.Connection")
    With cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & _
        "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        .Open
    End With
    
    
    '---Run the SQL SELECT Query---
    'sql = "SELECT [Sheet1$].[First Last], [Age], [Salary] FROM [Sheet1$] INNER JOIN [Sheet2$] ON [Sheet1$]" aynı şekilde tablodan farklı sayfalarda varsa
    'sql = "SELECT * FROM [Sayfa3$] where Adı Like ' " & txtlname.Text & "%'"
    sql = "SELECT * FROM [Sayfa3$] where Adı Like '%al%'"
    Set rs = cn.Execute(sql)
    
    Do
       output = output & rs(0) & ";" & rs(1) & ";" & rs(2) & vbNewLine
       Debug.Print rs(0); ";" & rs(1) & ";" & rs(2)
       rs.MoveNext
    Loop Until rs.EOF
    MsgBox output
    
    '---Clean up---
    rs.Close
    cn.Close
    Set cn = Nothing
    Set rs = Nothing
End Sub
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Merhaba,
SQL sorgusuna group by [Age] ilave ediniz. Örn:
Kod:
sql = "SELECT * FROM [Sayfa3$] where Adı Like '%al%' [COLOR="Red"][B]GROUP BY [Age] Asc[/B][/COLOR]
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
sql = "SELECT * FROM [Sayfa3$] where Adı Like '%al%' GROUP BY [Yaş] Asc şeklinde denedim. Söz dizimi hatası veriyor. (Başlık Yaş olarak geçiyor.Age olarak da denedim. Aynı hata)
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Kod:
sql = "SELECT * FROM [Sayfa3$] where Adı Like '%al%' GROUP BY [Age]
olarak deneyin. Asc sorun yaratıyor olabilir. Sorun düzelirse;
Kod:
sql = "SELECT * FROM [Sayfa3$] where Adı Like '%al%' GROUP BY [Age] ORDER BY [Age] Asc
olarak da çalışıp çalışmadığını deneyiniz. Dosya üzerinde deneme şansım yok.
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
* ile seçilen alanlara göre gruplandırma yapılamıyor diyor.
sql = "SELECT [Adı],[Soyadı],[Yaş] FROM [Sayfa3$] where [Adı] Like '%al%' GROUP BY [Yaş]"
şeklinde denedim. Adı ifadesi içermiyor diyor.
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sizin kodlarınıza ilave yaparken, pek dikkat etmedim. Şimdi dikkatimi çekti. Kodlarınızı; SQL Sorgu ifadesinde "" (string) ifadeler arasına yazılan hücre değerini belirtmek için, '%" & [A1].Value & "%' şeklinde düzeltmelisiniz. Kodlarınızda sütun başlıklarının İngilizce olduğunu farkettim. Öyle ise nasıl yazılı ise aynı şekilde belirtmelisiniz.
Alternatif örnek:
Kod:
SELECT [First Last], [COLOR="Red"][B]Min([/B][/COLOR][Age][COLOR="Red"][B])[/B][/COLOR], [Salary] FROM [Sheet1$] WHERE [First Last] like '%" & [A1].value & "%'
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Sayın antonio yazdığınız kodlar aynı örnekden yalnız ben başlıkları değiştirdim. Aynı şekilde hata veriyor.
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Örnek dosyanızı yüklemeniz mümkün mü?
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Tabiki. Örnek dosya ektedir.
Asıl amacım. Sayfa2 deki verilerin karşısına A daki isime göre en büyük yaşı olanları bulmak. Ya da en küçük.Örneğin A2 de Ali var 40 bulacak. (Sayfa1 de 10 ve 40 değeri var Ali isimlerinin karşısında)
 

Ekli dosyalar

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Merhaba,
Sorgulamanızda A1 hücresini referans göstermeniz gözden kaçan hatalardan biri. Ancak SQL sorgusunda da sebebini çözemediğim bir hata vardı. ADO ile bağlantı kodları için çok farklı kod yazım tarzları var. Herkes kendisine göre birinde karar kılıyor. Ben sizinkinden daha farklı bir ADO bağlantı ifade tarzı benimsediğimden, kendi bildiğimi yazdım. Dosyanız ektedir. Yazdığım kodlar aşağıdadır. Kolay gelsin.
Kod:
Sub ADO_ile_Sorgula()
Dim conn As Object, rs As Object, sorgu As String

Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
conn.Open "provider=microsoft.ace.oledb.12.0;data source=" & ThisWorkbook.FullName & ";extended properties=""Excel 12.0; hdr=yes"";"

sorgu = "select Adi, Soyadi, Yas from [Sayfa1$] where Adi like '%" & Sayfa2.Range("A2").Value & "%' " & _
    "order by Yas asc"

Set rs = conn.Execute(sorgu)

If Not rs.EOF Then
    Sayfa2.Range("A2:C200").ClearContents
    Sayfa2.Range("A2").CopyFromRecordset rs
End If
MsgBox "İşlem tamamlandı", vbInformation, "antonio"
Sayfa2.Activate

Set rs = Nothing
Set conn = Nothing
End Sub
 

Ekli dosyalar

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Sayın antonio ilginiz için çok teşekkür ederim. Yalnız istediğim tam olarak bu değil. Sayfa2 de isim listesi olduğu zaman sırası ile bu isimlerin karşısına en büyük yaşları ya da sayı da diyebiliriz getirmesi. Sayfa2 benzersiz liste, Sayfa1 benzerli liste. Sayfa2 deki benzersiz listede 2 satırdan itibaren aşağı doğru b sütununa a sütununda sorguladığı kişinin en büyük değerini getirmesi.
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın antonio ilginiz için çok teşekkür ederim. Yalnız istediğim tam olarak bu değil....
O halde kodları aşağıdakilerle değiştiriniz.
Kod:
Sub ADO_ile_Sorgula()
Dim conn As Object, rs As Object, sorgu As String, sh As Worksheet, ss As Long

Set sh = Sayfa2
ss = sh.Range("A56789").End(3).Row

Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
conn.Open "provider=microsoft.ace.oledb.12.0;data source=" & ThisWorkbook.FullName & ";extended properties=""Excel 12.0; hdr=yes"";"

For i = 2 To ss
    aranan = sh.Range("A" & i).Value
    sorgu = "select Adi, Soyadi, Yas from [Sayfa1$] where Adi like '%" & aranan & "%' " & _
        "order by Yas desc"
Set rs = conn.Execute(sorgu)
If Not rs.EOF Then
    sh.Range("A" & i).Value = rs("Adi")
    sh.Range("B" & i).Value = rs("Soyadi")
    sh.Range("C" & i).Value = rs("Yas")
End If

Next i

MsgBox "İşlem tamamlandı", vbInformation, "antonio"
Sayfa2.Activate

Set rs = Nothing
Set conn = Nothing
End Sub
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Sayın Antonio ilginiz için teşekkürler. Kodların daha hızlı olması için döngüsüz bir işlem olma imkanı var mı? Join ile iki sütunu kıyaslama gibi.
 

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
Merhaba,

Aşağıdaki kodu deneyebilir misiniz.

Kod:
Sub RunSELECT()

Sayfa2.Cells.Clear

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

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""

Sorgu = "select adi,max(yas) from[sayfa1$] group by adi"

Set rs = con.Execute(Sorgu)

Sayfa2.Range("a2").CopyFromRecordset rs

End Sub
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Aynı işlemi inner join ile yapabilir miyiz? Yani döngü olmadan.
 

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
Zaten döngü kullanmadımJoin'lerle olması için elimizde aranan degerlerin listesi olması gerekli.Onun içinde yine 2 sorgu yazmak gerekecek.
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Sayın Kuvari teşekkür ederim. En büyük değeri bulmayı yaptık.
Eklemiş olduğum örnekde Sayfa1 de liste. Sayfa2 de aranacak veriler mevcut. Sayfa2 deki verileri sayfa1 de arayacak. B sütunundaki en büyük değeri sayfa1 de yerine getirecek. Örneğin ilk değer Ali yi Sayfa birde bulacak. 2 değer mevcut. Biri 10 diğeri 40 yaşında. 40 yazacak.
 
Üst