• DİKKAT

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

SQL sorgusunda kodu kısaltma

Katılım
29 Ocak 2024
Mesajlar
277
Excel Vers. ve Dili
Office 2016
Kıymetli Hocalarım selamlar saygılar


Aşaşıdaki SQL sorgusunda
[DURUM] alanı 'A' , 'B' ve 'C' olanları [BRANS] Branşlara göre ayrı-ayrı çekiyordum,

burada 3 ayrı sorgu oluşturup, 3 defa kayıt kümsei oluşturmak yerine tek bir seferde yapılabilir mi?

böyle bir şey mümkün olur mu?

Yardımlarınız için şimdiden teşekkür ederim.


Kod:
Set SH = Sayfa5

SH.Range("A1:N10000").ClearContents

Set RS = VBA.CreateObject("adodb.RecordSet")

' ' A  /  /  /  /  /  /  /  /  /  /  /  /
Sorgu = "Select [BRANS], COUNT([ID_NO]) From [Data$] Where [DURUM]= 'A'"
Sorgu = Sorgu & " Group BY [BRANS]"

RS.Open Sorgu, Con

SH.Range("E2").CopyFromRecordset RS
RS.Close

' ' B /  /  /  /  /  /  /  /  /  /  /  /
Sorgu = "Select [BRANS], COUNT([ID_NO]) From [Data$] Where [DURUM]= 'B'"
Sorgu = Sorgu & " Group BY [BRANS]"

RS.Open Sorgu, Con

SH.Range("H2").CopyFromRecordset RS

RS.Close

' ' C /  /  /  /  /  /  /  /  /  /  /  /
Sorgu = "Select [BRANS], COUNT([ID_NO]) From [Data$] Where [DURUM]= 'C'"
Sorgu = Sorgu & " Group BY [BRANS]"

RS.Open Sorgu, Con

SH.Range("K2").CopyFromRecordset RS

RS.Close

iyi Akşamlar.
 
SQL:
Select [BRANS], [DURUM], COUNT([ID_NO])
From [Data$]
Where [DURUM] in('A', 'B', 'C')
Group BY [BRANS], [DURUM]
 
SQL:
Select [BRANS], [DURUM], COUNT([ID_NO])
From [Data$]
Where [DURUM] in('A', 'B', 'C')
Group BY [BRANS], [DURUM]
Zeki Hocam ilginiz için teşekkürler,
Yalnız ben buradaki ('A', 'B', 'C') kategorilerini ayrı ayrı gelmesini istiyordum, sizin verdiğin kodlarda hepsi birleşik geliyor
çünkü hepsinde aynı branşlar olmayabiliyor.

Talebimi Ekli linkteki ekran görüntüsünde anlatmaya çalıştım.

https://dosya.co/7wr8ium0htpl/141158.jpg.html

tekrar teşekkürler, iyi akşamlar.
 
İki hesap kullanıyorsunuz galiba... ?

Ayrıca resimleri foruma yükleyin; öteye beriye yönlendirilmekten bıktım...

.
 

Ekli dosyalar

  • 141158.jpg
    141158.jpg
    135.7 KB · Görüntüleme: 5
@Zeki Gürsoy hocamın kodu kullanarak oluşturduğunuz recordseti filtreleyerek kullanabilirsiniz. Ama bu durumda da durum verisini de almanız gerekir. Durum verisinin sütunlarda yer almaması için ayrı işlem yapılması gerekir bu daha da uzun bir kod demektir.

Yada birleşik sorgu kullanıp tek sorguyla halledilebilir ama biraz karmaşık bir sorgu olabilir.
Not: hiç birini denemedim sadece aklıma gelen olasılıkları söyledim.
 
@Zeki Gürsoy hocamın kodu kullanarak oluşturduğunuz recordseti filtreleyerek kullanabilirsiniz. Ama bu durumda da durum verisini de almanız gerekir. Durum verisinin sütunlarda yer almaması için ayrı işlem yapılması gerekir bu daha da uzun bir kod demektir.

Yada birleşik sorgu kullanıp tek sorguyla halledilebilir ama biraz karmaşık bir sorgu olabilir.
Not: hiç birini denemedim sadece aklıma gelen olasılıkları söyledim.
önerileriniz için Teşekkür ederim Halil Hocam
 
@Zeki Gürsoy hocamın kodunun düzenlenmiş hali
Kod:
Sub Asil_Zeki()
t1 = Timer
Set SH = Sayfa5

SH.Range("A1:N10000").ClearContents

Set RS = VBA.CreateObject("adodb.RecordSet")
yol = ThisWorkbook.FullName
 Set Con = CreateObject("adodb.connection")
With Con
    .provider = "Microsoft.ACE.OLEDB.12.0"
    .connectionstring = "Data Source=" & yol & ";Extended Properties=""Excel 12.0;"""
    .Open
End With

Sorgu = "Select [BRANS], COUNT([ID_NO]) as Say,[DURUM] From [Data$]"
Sorgu = Sorgu & " Group BY [BRANS],[DURUM]"

RS.Open Sorgu, Con, 3, 1

RS.Filter = "DURUM='A'": SH.Range("E2").CopyFromRecordset RS: SH.Range("G1:G10000").ClearContents
RS.Filter = "DURUM='B'": SH.Range("H2").CopyFromRecordset RS: SH.Range("J1:J10000").ClearContents
RS.Filter = "DURUM='C'": SH.Range("K2").CopyFromRecordset RS: SH.Range("M1:M10000").ClearContents

t2 = Timer
Debug.Print "Asil_zeki", t2 - t1
End Sub
 
Geri
Üst