SQL sorgusu OR operatöründe en az iki koşul

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,990
Excel Vers. ve Dili
Office 2013 İngilizce
Arkadaşla merhaba,

Aşağıdaki SQL sorgusunda kafama takılan bir hususta sizlerin destek ve önerielrine ihtiyacım bulunmakta;

Bilindiği üzere OR operatörü ile birden fazla alanda en az bir kriter sağlandığında koşul sağlanmış oluyor,
koşulun sağlanabilmesi için en az iki kriter karşılanmış olması gibi sorgu yazılabilir mi?

sorgudaki her hangi 2 alanın koşulu sağlanması
Kod:
 strSql = "SELECT * FROM [Data$]" & _
            " WHERE F16 =" & a1 & " OR F16 =" & b1 & _
                " OR F17 =" & a2 & " OR F17 =" & b2 & _
                " OR F18 =" & a3 & " OR F18 =" & b3
şimdiden teşekkürler,
iyi Çalışmalar
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
521
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
SQL'de belirttiğiniz gibi en az iki kriterin sağlanması için bir sorgu yazabilirsiniz. Bunu AND operatörünü kullanarak yapabilirsiniz.

Örneğin, aşağıdaki sorgu, F16, F17 ve F18 alanlarından en az iki tanesinin koşulu sağlaması durumunda kayıtları getirecektir:

strSql = "SELECT * FROM [Data$]" & _
" WHERE (F16 =" & a1 & " OR F16 =" & b1 & ")" & _
" AND (F17 =" & a2 & " OR F17 =" & b2 & ")" & _
" OR (F18 =" & a3 & " OR F18 =" & b3 & ")"

Bu şekilde, parantez içindeki her bir koşul grubu bağımsız olarak değerlendirilir ve bunlardan en az ikisinin sağlanması durumunda kayıt getirilir.

Alternatif olarak, aşağıdaki gibi bir yaklaşım da kullanılabilir:

strSql = "SELECT * FROM [Data$]" & _
" WHERE (F16 =" & a1 & " AND F17 =" & a2 & ") OR" & _
" (F16 =" & a1 & " AND F18 =" & a3 & ") OR" & _
" (F17 =" & a2 & " AND F18 =" & a3 & ")"

Bu durumda, her bir koşul grubu içindeki iki koşulun da sağlanması gerekir.


-- Örnek: F16, F17 ve F18 alanlarından en az biri a1 veya b1 değerine eşit olan kayıtları seçer.

SELECT *
FROM [Data$]
WHERE F16 = 'a1' OR F16 = 'b1'
OR F17 = 'a2' OR F17 = 'b2'
OR F18 = 'a3' OR F18 = 'b3';

Hocam haddimiz olmayarak katkı olabilirmi düşüncesiyle yp çözüm önerisi böyledir.Görüşünüze sunulur.
 
Son düzenleme:

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,990
Excel Vers. ve Dili
Office 2013 İngilizce
SQL'de belirttiğiniz gibi en az iki kriterin sağlanması için bir sorgu yazabilirsiniz. Bunu AND operatörünü kullanarak yapabilirsiniz.

Örneğin, aşağıdaki sorgu, F16, F17 ve F18 alanlarından en az iki tanesinin koşulu sağlaması durumunda kayıtları getirecektir:

strSql = "SELECT * FROM [Data$]" & _
" WHERE (F16 =" & a1 & " OR F16 =" & b1 & ")" & _
" AND (F17 =" & a2 & " OR F17 =" & b2 & ")" & _
" OR (F18 =" & a3 & " OR F18 =" & b3 & ")"

Bu şekilde, parantez içindeki her bir koşul grubu bağımsız olarak değerlendirilir ve bunlardan en az ikisinin sağlanması durumunda kayıt getirilir.

Alternatif olarak, aşağıdaki gibi bir yaklaşım da kullanılabilir:

strSql = "SELECT * FROM [Data$]" & _
" WHERE (F16 =" & a1 & " AND F17 =" & a2 & ") OR" & _
" (F16 =" & a1 & " AND F18 =" & a3 & ") OR" & _
" (F17 =" & a2 & " AND F18 =" & a3 & ")"

Bu durumda, her bir koşul grubu içindeki iki koşulun da sağlanması gerekir.


-- Örnek: F16, F17 ve F18 alanlarından en az biri a1 veya b1 değerine eşit olan kayıtları seçer.

SELECT *
FROM [Data$]
WHERE F16 = 'a1' OR F16 = 'b1'
OR F17 = 'a2' OR F17 = 'b2'
OR F18 = 'a3' OR F18 = 'b3';

Hocam haddimiz olmayarak katkı olabilirmi düşüncesiyle yp çözüm önerisi böyledir.Görüşünüze sunulur.
Hocam ilginize teşekkür ederim,
yalnız burada en az 2 kriter yerine en az 3 kriterin sağlanması için dediğimizde string epey karışacaktır, bunun pratik bir yolu var mıdır diye araştırıyordum.
iyi Çalışmalar.
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
521
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
SQL'de, birden fazla koşulu kontrol etmek için HAVING clausunu kullanabilirsiniz. HAVING clausu, GROUP BY ile birlikte kullanılır ve gruplar üzerinde koşul kontrolü yapar.

Örneğin, aşağıdaki sorgu, F16, F17 ve F18 alanlarından en az 3 tanesinin koşulu sağlaması durumunda kayıtları getirecektir:

strSql = "SELECT *
FROM [Data$]
GROUP BY F16, F17, F18
HAVING SUM(CASE WHEN F16 = " & a1 & " THEN 1 ELSE 0 END) +
SUM(CASE WHEN F16 = " & b1 & " THEN 1 ELSE 0 END) +
SUM(CASE WHEN F17 = " & a2 & " THEN 1 ELSE 0 END) +
SUM(CASE WHEN F17 = " & b2 & " THEN 1 ELSE 0 END) +
SUM(CASE WHEN F18 = " & a3 & " THEN 1 ELSE 0 END) +
SUM(CASE WHEN F18 = " & b3 & " THEN 1 ELSE 0 END) >= 3"

Bu yaklaşımda, CASE ifadeleri ile her bir koşul için 1 veya 0 değeri döndürülür. Daha sonra, SUM fonksiyonu ile bu değerler toplanır ve toplam 3 veya daha fazla olması durumunda kayıtlar getirilir.

Örnek 1:
Aşağıdaki sorgu, F16 = 'A' veya 'B', F17 = 'X' veya 'Y' ve F18 = 'P' veya 'Q' koşullarından en az 3 tanesinin sağlanması durumunda kayıtları getirir:

Code:
strSql = "SELECT *
FROM [Data$]
GROUP BY F16, F17, F18
HAVING SUM(CASE WHEN F16 = 'A' THEN 1 ELSE 0 END) +
SUM(CASE WHEN F16 = 'B' THEN 1 ELSE 0 END) +
SUM(CASE WHEN F17 = 'X' THEN 1 ELSE 0 END) +
SUM(CASE WHEN F17 = 'Y' THEN 1 ELSE 0 END) +
SUM(CASE WHEN F18 = 'P' THEN 1 ELSE 0 END) +
SUM(CASE WHEN F18 = 'Q' THEN 1 ELSE 0 END) >= 3"

Hocam bu kodu denermisiniz

strSql = "SELECT *
FROM [Data$]
WHERE (CASE WHEN F16 = " & a1 & " THEN -1 ELSE 0 END) +
(CASE WHEN F16 = " & b1 & " THEN -1 ELSE 0 END) +
(CASE WHEN F17 = " & a2 & " THEN -1 ELSE 0 END) +
(CASE WHEN F17 = " & b2 & " THEN -1 ELSE 0 END) +
(CASE WHEN F18 = " & a3 & " THEN -1 ELSE 0 END) +
(CASE WHEN F18 = " & b3 & " THEN -1 ELSE 0 END) < -1"

Bu şekilde, CASE ifadeleri içinde her bir koşul için -1 veya 0 değeri döndürülüyor ve toplam değer -1'den küçük olduğunda kayıtlar getirilmiş oluyor.

Hocam Lütfen bakabilirmisiniz.Görüşünüze sunulur.
 
Son düzenleme:
Katılım
2 Temmuz 2014
Mesajlar
90
Excel Vers. ve Dili
2021 Türkçe, 64bit
aşağıdaki koddu dener misiniz?
temel mantık koşul sağlandığında -1, sağlanmadığında 0 olacağından koşulu sağlayanların toplamının kontrol edilmesidir
2 koşul sağlandığında -1+-1=-2 olacağından sonucun <-1 olması yeterlidir
Kod:
strSql = "SELECT * FROM [Data$]" & _
            " WHERE( (F16 =" & a1 & " )+( F16 =" & b1 & _
                ") + (F17 =" & a2 & ") + (F17 =" & b2 & _
                ") + (F18 =" & a3 & ") + (F18 =" & b3 & "))<-1"
not; dikkatimden kaçan yazım hataları olabilir
mantık where ((alan1=koşul1)+(alan2=koşul2)+(alan3=koşul3)+......)<-1
 
Son düzenleme:

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,990
Excel Vers. ve Dili
Office 2013 İngilizce
@muhasebeciyiz ve @haliliyas hocalarım desteğiniz için teşekkürler,
en kısa sürede denemeleri yapacağız.

her şey için tekrar teşekkürler.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,990
Excel Vers. ve Dili
Office 2013 İngilizce
SQL'de, birden fazla koşulu kontrol etmek için HAVING clausunu kullanabilirsiniz. HAVING clausu, GROUP BY ile birlikte kullanılır ve gruplar üzerinde koşul kontrolü yapar.

Örneğin, aşağıdaki sorgu, F16, F17 ve F18 alanlarından en az 3 tanesinin koşulu sağlaması durumunda kayıtları getirecektir:

strSql = "SELECT *
FROM [Data$]
GROUP BY F16, F17, F18
HAVING SUM(CASE WHEN F16 = " & a1 & " THEN 1 ELSE 0 END) +
SUM(CASE WHEN F16 = " & b1 & " THEN 1 ELSE 0 END) +
SUM(CASE WHEN F17 = " & a2 & " THEN 1 ELSE 0 END) +
SUM(CASE WHEN F17 = " & b2 & " THEN 1 ELSE 0 END) +
SUM(CASE WHEN F18 = " & a3 & " THEN 1 ELSE 0 END) +
SUM(CASE WHEN F18 = " & b3 & " THEN 1 ELSE 0 END) >= 3"

Bu yaklaşımda, CASE ifadeleri ile her bir koşul için 1 veya 0 değeri döndürülür. Daha sonra, SUM fonksiyonu ile bu değerler toplanır ve toplam 3 veya daha fazla olması durumunda kayıtlar getirilir.

Örnek 1:
Aşağıdaki sorgu, F16 = 'A' veya 'B', F17 = 'X' veya 'Y' ve F18 = 'P' veya 'Q' koşullarından en az 3 tanesinin sağlanması durumunda kayıtları getirir:

Code:
strSql = "SELECT *
FROM [Data$]
GROUP BY F16, F17, F18
HAVING SUM(CASE WHEN F16 = 'A' THEN 1 ELSE 0 END) +
SUM(CASE WHEN F16 = 'B' THEN 1 ELSE 0 END) +
SUM(CASE WHEN F17 = 'X' THEN 1 ELSE 0 END) +
SUM(CASE WHEN F17 = 'Y' THEN 1 ELSE 0 END) +
SUM(CASE WHEN F18 = 'P' THEN 1 ELSE 0 END) +
SUM(CASE WHEN F18 = 'Q' THEN 1 ELSE 0 END) >= 3"

Örnek 2:
Aşağıdaki sorgu, F16 > 100 ve F17 < 50 ve F18 BETWEEN 10 AND 20 koşullarından en az 3 tanesinin sağlanması durumunda kayıtları getirir:

Code:
strSql = "SELECT *
FROM [Data$]
GROUP BY F16, F17, F18
HAVING SUM(CASE WHEN F16 > 100 THEN 1 ELSE 0 END) +
SUM(CASE WHEN F17 < 50 THEN 1 ELSE 0 END) +
SUM(CASE WHEN F18 BETWEEN 10 AND 20 THEN 1 ELSE 0 END) >= 3"

Bu örneklerde de görüldüğü gibi, HAVING clausu ile koşul sayısı arttıkça daha okunabilir ve yönetilebilir bir sorgu oluşturabilirsiniz.

Hocam Lütfen bakabilirmisiniz.Görüşünüze sunulur.
Hocam buradaki WHEN komutunu Excel tanımadı IF olarak denedim yine hata verdi.
iyi geceler.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,990
Excel Vers. ve Dili
Office 2013 İngilizce
aşağıdaki koddu dener misiniz?
temel mantık koşul sağlandığında -1, sağlanmadığında 0 olacağından koşulu sağlayanların toplamının kontrol edilmesidir
2 koşul sağlandığında -1+-1=-2 olacağından sonucun <-1 olması yeterlidir
Kod:
strSql = "SELECT * FROM [Data$]" & _
            " WHERE( (F16 =" & a1 & " )+( F16 =" & b1 & _
                ") + (F17 =" & a2 & ") + (F17 =" & b2 & _
                ") + (F18 =" & a3 & ") + (F18 =" & b3 & "))<-1"
not; dikkatimden kaçan yazım hataları olabilir
mantık where ((alan1=koşul1)+(alan2=koşul2)+(alan3=koşul3)+......)<-1
Halil Hocam bu kodlar sorunsuz çalışıyor, ilgi ve emeğiniz için çok teşekkür ederim.
iyi geceler.
 
Üst