2017-02-10 13 views
0

Когда я выполняю единственное, что работает, это Zipcodes. Это не дает мне дату службы больше, чем 08/01/16 или моих платежных провайдеров. Я не знаю, почему.Почему мой код игнорируется?

SELECT Name, BirthDate, Address1, Address2, City, StateProvince, ZipCode, BillingProviderID, ServiceDate, ChargeCatID 
FROM dbo.PbrChargeTransactions 
WHERE ChargeCatID = 'EM' 
AND ServiceDate >= '08/01/16' 
AND BillingProviderID IN ('AAD.FD','DSD.DFD','ASDF.DD') 
AND ZipCode Like '68730%' 
OR ZipCode Like '68792%' 
OR ZipCode Like '68739%' 
OR ZipCode Like '68718%' 
OR ZipCode Like '57069%' 
OR ZipCode Like '57031%' 
OR ZipCode Like '57078%' 
OR ZipCode Like '57066%' 
OR ZipCode Like '57063%' 
OR ZipCode Like '57037%' 
OR ZipCode Like '57073%' 
OR ZipCode Like '57029%' 
OR ZipCode Like '57070%' 
ORDER BY Name 
+2

Вам нужны скобки: прямо сейчас вы получаете (ChargeCatID = 'EM' AND ServiceDate> = '08/01/16 'И BillignProviderID IN (...) И ZipCode Как «68730%») ИЛИ (ZipCode Как «68792%») ИЛИ (ZipCode Like ...). Очевидно, это не то, что вам нужно. – Martha

ответ

1

Приоритет оператора: «И» связывается более плотно, чем «или». То есть, только первое сравнение с zip-кодом оценивается с остальными вашими «и» условиями. Остальные - «OR», и если они совпадают, вы получаете отчет.

Попробуйте это:

SELECT Name, BirthDate, Address1, Address2, City, StateProvince, ZipCode,  BillingProviderID, ServiceDate, ChargeCatID 
FROM dbo.PbrChargeTransactions 
WHERE ChargeCatID = 'EM' 
AND ServiceDate >= '08/01/16' 
AND BillingProviderID IN ('AAD.FD','DSD.DFD','ASDF.DD') 
AND (ZipCode Like '68730%' 
OR ZipCode Like '68792%' 
OR ZipCode Like '68739%' 
OR ZipCode Like '68718%' 
OR ZipCode Like '57069%' 
OR ZipCode Like '57031%' 
OR ZipCode Like '57078%' 
OR ZipCode Like '57066%' 
OR ZipCode Like '57063%' 
OR ZipCode Like '57037%' 
OR ZipCode Like '57073%' 
OR ZipCode Like '57029%' 
OR ZipCode Like '57070%' 
) 
ORDER BY Name 
0

Вы можете использовать (...) в n8wrl шоу или следующее, что я думаю, что будет быстрее.

SELECT Name, BirthDate, Address1, Address2, City, StateProvince, ZipCode, BillingProviderID, ServiceDate, ChargeCatID 
FROM dbo.PbrChargeTransactions 
WHERE ChargeCatID = 'EM' 
AND ServiceDate >= '08/01/16' 
AND BillingProviderID IN ('AAD.FD','DSD.DFD','ASDF.DD') 
AND LEFT(ZipCode,5) in ('68730','68792','68739','68718','57069','57031', '57078','57066','57063','57037','57073','57029','57070') 
ORDER BY Name 
0

Проблема может заключаться в том, что вы пропустили скобки. Обратите внимание на precedence of operators

Если вы пишете

A AND B AND zip1 OR zip2 OR zip3 

это равняется

((A AND B) AND zip1) OR zip2 OR zip3 

Я думаю, что вы хотели, чтобы написать

A AND B AND (zip1 OR zip2 OR zip3) 

где A, B, zip1 , ... являются булевыми условиями, такими как zip LIKE '12345%'