Sql sorgu kısaltma...

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,061
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba,
Aşağıdaki sorguda;

Name alanında 3 değeri (Elit, Dol, Bata) içeren satırları sorgulama dışında bırakmak istiyorum.

name Not like '%Elit%' and name Not like '%Dol%' and name Not like '%bata%'

bu ifadeyi daha kısa ve daha düzgün nasıl yazabiliriz?

Kod:
Sorgu = "Select DISTINCT category FROM " & Table & _
"where stok>0 and price>100 and name Not like '%Elit%' and name Not like '%Dol%' and name Not like '%bata%'"
teşekkürler,
iyi çalışmalar.
 

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
"Name" alanındaki sözkonusu veriler "Dol", "Elit", "Bata" gibiyse daha kısası olabilir ama örneğin "Dolcavita", "Elitnet", "Batarya" gibiyse daha kısası olmaz...

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,061
Excel Vers. ve Dili
Office 2013 İngilizce
"Name" alanındaki sözkonusu veriler "Dol", "Elit", "Bata" gibiyse daha kısası olabilir ama örneğin "Dolcavita", "Elitnet", "Batarya" gibiyse daha kısası olmaz...

.
Hocam buradaki "Dol", "Elit", "Bata" terimler önemli değil;

Name IN ( '%Dol%', '%Elit%', '%Bata%')
gibi kodu kısaltmak ve daha kullanılabilir kılmak istiyorum, şimdi başka ifadeler de gelecek, derdim bunların hiçbirini içermeyen gibi daha basit nasıl yazılabilir?
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,354
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
"IN" kullanımınız yanlış; yalnız eşitlikleri kontrol edebilir.

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,061
Excel Vers. ve Dili
Office 2013 İngilizce
"IN" kullanımınız yanlış; yalnız eşitlikleri kontrol edebilir.

.
Zeki Hocam burada "IN" kullanımını sadece örnek olsun diye verdim, Bunun gibi bir yöntem var mıdır? diye araştırıyorum.
bunları içermesin diye düşündüğüm ifadeler, şu anda 5 terim oldu;

AND ... and... sürekli çok uzun oluyor.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,354
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Maalesef... "içerir" ifadesi için tek tek yazmanız veya VBA ile ifadeyi dinamik oluşturmanız gerekiyor.

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,061
Excel Vers. ve Dili
Office 2013 İngilizce
Maalesef... "içerir" ifadesi için tek tek yazmanız veya VBA ile ifadeyi dinamik oluşturmanız gerekiyor.

.
Zeki Hocam "VBA ile ifadeyi dinamik oluşturmak" derken, sql sorgusunda nasıl bir yöntemdir?
bir örnek verebilir misiniz?
teşekkürler...
 
Katılım
24 Nisan 2005
Mesajlar
3,671
Excel Vers. ve Dili
Office 2016 EN 64 Bit
Altın Üyelik Bitiş Tarihi
25/05/2022
Merhaba,
Aşağıdaki sorguda;

Name alanında 3 değeri (Elit, Dol, Bata) içeren satırları sorgulama dışında bırakmak istiyorum.

name Not like '%Elit%' and name Not like '%Dol%' and name Not like '%bata%'

bu ifadeyi daha kısa ve daha düzgün nasıl yazabiliriz?

Kod:
Sorgu = "Select DISTINCT category FROM " & Table & _
"where stok>0 and price>100 and name Not like '%Elit%' and name Not like '%Dol%' and name Not like '%bata%'"
teşekkürler,
iyi çalışmalar.
Bu şekilde deneyin en azından NOT ları tekrarlamamış olursunuz.
SQL konusunda deneyimli değilim :)

and Not (name like '%Elit%' or name like '%Dol%' or name like '%bata%')
 

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
Eğer "Name" isimli veri alanındaki verileriniz resimde belirtildiği gibiyse, aşağıdaki sorgu işinize yarar...


C#:
    Sorgu = "Select Distinct [Category] From [Sheet1$] Where [Stok]>0 And [Price]>100 " & _
            " And Left([Name],4) Not In ('Elit', 'Dolc', 'Bata')"

Bu sorguda diğer kriterle birlikte "Name" alanındaki verilerin soldan ilk 4 karakteri kontrol edilmekte olup, geri dönen veri seti M1 ve M2 dir... (2 ve 3. satırlardaki veriler)






Zeki Gürsoy'un bahsettiği dinamik tanımlama işini de, aşağıdaki kodda "arrExceptions" dizisinin elemanlarına ilave yaparak SQL sorgusunda şu şekilde kullanabilirsiniz;

C#:
    arrExceptions = Array("Elit", "Dolca", "Bata")
   
    For i = LBound(arrExceptions) To UBound(arrExceptions)
        arrExceptions(i) = "[Name] Not Like '%" & arrExceptions(i) & "%'"
    Next
   
    strExceptions = Join(arrExceptions, " And ")
   
    Sorgu = "Select Distinct [Category] From " & Table & " Where [Stok]>0 And [Price]>100 And " & strExceptions
.
 
Son düzenleme:

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,061
Excel Vers. ve Dili
Office 2013 İngilizce
Eğer "Name" isimli veri alanındaki verileriniz resimde belirtildiği gibiyse, aşağıdaki sorgu işinize yarar...


C#:
    Sorgu = "Select Distinct [Category] From [Sheet1$] Where [Stok]>0 And [Price]>100 " & _
            " And Left([Name],4) Not In ('Elit', 'Dolc', 'Bata')"

Bu sorguda diğer kriterle birlikte "Name" alanındaki verilerin soldan ilk 4 karakteri kontrol edilmekte olup, geri dönen veri seti M1 ve M2 dir... (2 ve 3. satırlardaki veriler)






Zeki Gürsoy'un bahsettiği dinamik tanımlama işini de, aşağıdaki kodda "arrExceptions" dizisinin elemanlarına ilave yaparak SQL sorgusunda şu şekilde kullanabilirsiniz;

C#:
    arrExceptions = Array("Elit", "Dolca", "Bata")
 
    For i = LBound(arrExceptions) To UBound(arrExceptions)
        arrExceptions(i) = "[Name] Not Like '%" & arrExceptions(i) & "%'"
    Next
 
    strExceptions = Join(arrExceptions, " And ")
 
    Sorgu = "Select Distinct [Category] From " & Table & " Where [Stok]>0 And [Price]>100 And " & strExceptions
.
Zeki Hocam;
Haluk Hocam;
Çok teşekkürler, bu şekilde bir çözüm arıyordum.
arrExceptions = Array("Elit", "Dolca", "Bata") sanırım buradaki listeyi bir excel sayfasından da alabilirim.

iyi günler, iyi çalışmalar.
 

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
Sözkonusu liste "Sheet1" sayfasında "H" sütunundaysa;

Örneğin; H2 ="Elitnet", H3 ="Dolcavita", H4="Batarya", ...........


C#:
    Dim arrExceptions()
    Dim myArr()
    
    Table = "[Sheet1$]"
    Set mySh = Sheets("Sheet1")
    
    arrExceptions = mySh.Range("H2:H" & mySh.Range("H" & Rows.Count).End(xlUp).Row).Value
    
    For i = LBound(arrExceptions, 1) To UBound(arrExceptions, 1)
        ReDim Preserve myArr(1 To i)
        myArr(i) = "[Name] Not Like '%" & arrExceptions(i, 1) & "%'"
    Next
    
    strExceptions = Join(myArr, " And ")
    
    Sorgu = "Select Distinct [Category] From " & Table & " Where [Stok]>0 And [Price]>100 And " & strExceptions

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,061
Excel Vers. ve Dili
Office 2013 İngilizce
Sözkonusu liste "Sheet1" sayfasında "H" sütunundaysa;

Örneğin; H2 ="Elitnet", H3 ="Dolcavita", H4="Batarya", ...........


C#:
    Dim arrExceptions()
    Dim myArr()
   
    Table = "[Sheet1$]"
    Set mySh = Sheets("Sheet1")
   
    arrExceptions = mySh.Range("H2:H" & mySh.Range("H" & Rows.Count).End(xlUp).Row).Value
   
    For i = LBound(arrExceptions, 1) To UBound(arrExceptions, 1)
        ReDim Preserve myArr(1 To i)
        myArr(i) = "[Name] Not Like '%" & arrExceptions(i, 1) & "%'"
    Next
   
    strExceptions = Join(myArr, " And ")
   
    Sorgu = "Select Distinct [Category] From " & Table & " Where [Stok]>0 And [Price]>100 And " & strExceptions

.
Teşekkürler Haluk Hocam
iyiki varsınız....
 
Üst