Asp.net 如何在SQL SERVER的Where条件下使用multiple-between-Caluse

Asp.net 如何在SQL SERVER的Where条件下使用multiple-between-Caluse,asp.net,sql,sql-server,sql-server-2008,unique,Asp.net,Sql,Sql Server,Sql Server 2008,Unique,我想获得不同范围的数据,如“订户\u ZIP介于'30000'和'31999'之间”” 以及“SUBSCRIBER\u ZIP介于'39813'和'39901'之间””和“SUBSCRIBER\u ZIP介于'32000'和'34999'之间”” 我想获得所有具有此搜索条件的活动记录(表示状态=1)。我为此使用了Union,但它没有为我提供唯一的记录: Select distinct(SUBSCRIBER_EMAIL), SUBSCRIBER_Id FROM (select distinct(

我想获得不同范围的数据,如“
订户\u ZIP介于'30000'和'31999'之间”
” 以及“
SUBSCRIBER\u ZIP介于'39813'和'39901'之间”
”和“
SUBSCRIBER\u ZIP介于'32000'和'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 

但它并没有给我提供独特的结果。请帮助我怎么做。

为什么不使用

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'
)

注意:不要对数字使用引号

您得到的重复值是多少?订户压缩是某种文本字段而不是数字字段吗?如果是这样,它将使用文本排序,这意味着
“33”
将介于
“32000”
“34999”
之间。虽然如果它们总是五个字符,我想你会侥幸逃脱。订阅服务器是文本字段吗?是的@SirajMansour这不是一个大问题,问题是如何获得不同的记录raman:你有重复的记录,是因为你的邮政编码不止一个。我无法立即思考这是如何发生的,这就是为什么我要求提供其中一个副本的示例,以便更好地理解。这是一个XY问题:修复查询没有用,因为问题在表(或视图)
订阅者
中。请提供样品数据。然后,要么您的表包含重复项,要么订户是视图而不是表。不管怎样,查询都不应该受到责备。尽管我看得越多,我意识到在一开始使用distinct时,结果集中不可能有重复项。。。
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)
)