如何在SQL SERVER中的Where Condition中的Clause之间使用Multiple

时间:2014-02-07 11:54:30

标签: asp.net sql sql-server sql-server-2008 unique

我想获取不同范围的数据,例如“SUBSCRIBER_ZIP between '30000' and '31999'” 和“SUBSCRIBER_ZIP between '39813' and '39901'”和“SUBSCRIBER_ZIP between '32000' and '34999'”。

我希望获得具有此搜索条件的所有活动记录(表示状态= 1)。我已经使用了Union,但它并没有为我提供独特的记录:

Select distinct(SUBSCRIBER_EMAIL), SUBSCRIBER_Id FROM
 (select distinct(SUBSCRIBER_EMAIL),SUBSCRIBER_ID from SUBSCRIBER where SUBSCRIBER_ACTIVE = 1  and SUBSCRIBER_ZIP between '30000' and '31999'    
  Union    
 select distinct(SUBSCRIBER_EMAIL),SUBSCRIBER_ID from SUBSCRIBER where SUBSCRIBER_ACTIVE = 1  and SUBSCRIBER_ZIP between '39813' and '39901'    
  Union 
 select distinct(SUBSCRIBER_EMAIL),SUBSCRIBER_ID from SUBSCRIBER where SUBSCRIBER_ACTIVE = 1  and SUBSCRIBER_ZIP between '32000' and '34999'    
 ) x 

但它并没有为我提供独特的结果。请帮帮我怎样才能做到。

2 个答案:

答案 0 :(得分:0)

为什么不使用OR

select distinct SUBSCRIBER_EMAIL, SUBSCRIBER_ID
from SUBSCRIBER
where SUBSCRIBER_ACTIVE = 1
and (
    SUBSCRIBER_ZIP between '30000' and '31999' or
    SUBSCRIBER_ZIP between '39813' and '39901' or
    SUBSCRIBER_ZIP between '32000' and '34999'
)

答案 1 :(得分:0)

SELECT DISTINCT [SUBSCRIBER_EMAIL],[SUBSCRIBER_ID] FROM SUBSCRIBER WHERE ([SUBSCRIBER_ACTIVE] = 1) AND 
(
  (CAST(SUBSCRIBER_ZIP AS INT) BETWEEN 30000 AND 31999) 
OR
  (CAST(SUBSCRIBER_ZIP AS INT) BETWEEN 39813 AND 39901)
OR
  (CAST(SUBSCRIBER_ZIP AS INT) BETWEEN 32000 AND 34999)
)

注意:请勿使用数字引用