2014-01-14 8 views
0

Я пытаюсь добавить предложение Or в мое заявление where и могу использовать небольшую помощь.Where Clause with And &

Вот что у меня есть:

Where 
    W.Insured_Id = P.Insured_Id and 
    P.Insured_Id = I.Insured_Id and 
    I.Insured_Id = IU.Insured_Id and 
    p.expiration_date > to_date ('30-Apr-2014','dd-mm-yyyy') and 
    p.expiration_date < to_date ('16-Dec-2014','dd-mm-yyyy') or  
    p.expiration_date > to_date ('15-Dec-2013','dd-mm-yyyy') and 
    p.expiration_date < to_date ('01-May-2014','dd-mm-yyyy') and 
    p.annual_premium < '1000' or 
    p.expiration_date > to_date ('15-Dec-2014','dd-mm-yyyy') and 
    p.expiration_date < to_date ('01-Jan-2015','dd-mm-yyyy') and 
    p.annual_premium < '1000' 

Я пытаюсь вернуть все политики в период с 1 мая по 15 декабря и только политики, которые имеют менее 1000 в премии за оставшуюся часть года.

Дайте мне знать, если я могу предоставить дополнительную информацию.

Благодарим за помощь!

ответ

0

Итак, это немного запутанно, потому что ваш код подсказывает, что вы пытаетесь сделать что-то совсем другое, чем то, что вы просите. Для того, чтобы сделать то, что вы просили, вы хотите сделать что-то вдоль линий:

Where 
W.Insured_Id = P.Insured_Id and 
P.Insured_Id = I.Insured_Id and 
I.Insured_Id = IU.Insured_Id and 
p.expiration_date > to_date ('15-Dec-2013','dd-mm-yyyy') and 
p.expiration_date < to_date ('01-May-2014','dd-mm-yyyy') and 
p.annual_premium < '1000' 

Который должен вернуть все записи между 12/15/2013 и 05/01/2014 с annual_premium < 1000. код включен может быть изменен, чтобы работать, используя круглые скобки таким образом:

Where 
W.Insured_Id = P.Insured_Id and 
P.Insured_Id = I.Insured_Id and 
I.Insured_Id = IU.Insured_Id and 
(
    (
     p.expiration_date > to_date ('30-Apr-2014','dd-mm-yyyy') and 
     p.expiration_date < to_date ('16-Dec-2014','dd-mm-yyyy') 
    ) 
    or 
    (
     p.expiration_date > to_date ('15-Dec-2013','dd-mm-yyyy') and 
     p.expiration_date < to_date ('01-May-2014','dd-mm-yyyy') 
    ) 
    or 
    (
     p.expiration_date > to_date ('15-Dec-2014','dd-mm-yyyy') and 
     p.expiration_date < to_date ('01-Jan-2015','dd-mm-yyyy') 
    ) 
    or 
    (
     p.expiration_date > to_date ('15-Dec-2014','dd-mm-yyyy') and 
     p.expiration_date < to_date ('01-Jan-2015','dd-mm-yyyy') 
    ) 
) 
and p.annual_premium < '1000' 

Однако, это будет включать кучу записей по сравнению с тем, что вы просили. Упрощенный, этот код работает так же, как и этот, из-за совпадающих дат:

Where 
W.Insured_Id = P.Insured_Id and 
P.Insured_Id = I.Insured_Id and 
I.Insured_Id = IU.Insured_Id and 
p.expiration_date > to_date ('15-Dec-2013','dd-mm-yyyy') and 
p.expiration_date < to_date ('01-Jan-2015','dd-mm-yyyy') and 
p.annual_premium < '1000' 
+0

Это здорово, и я сожалею, я думаю, пытаясь пройти через это, я еще больше смутил себя (видимо, не сложно сделать). То, что мне нужно было вернуть, - это политика между 12-16-2013 и 4-31-2014 годами до 1000 лет, а затем все остальное в течение года. Я смог решить это с помощью ваших ответов! Еще раз спасибо! – Brad

0

Вы должны окружить OR положения с bracketes и использовать в скобках:

(... или ...) и (... или ...) ...

+0

Вы можете бросить их туда, куда они должны пойти? Я попытался сделать это на моей стороне безуспешно. Еще раз спасибо! – Brad