2013-05-08 53 views
0

我有一个具有不同状态的列的报表。我如何从我的参数中过滤那些只有东和西而不是个别状态的状态?如何根据East/West参数筛选我的状态列?

我的状态列表查询:

select distinct 
state 
from contract 

我对参数查询是:

select distinct 
case when STATE = 'CA' or STATE = 'WA' or STATE = 'MO' 
     or STATE = 'OR' or STATE = 'NV' or STATE = 'ID' 
     or STATE = 'MT' or STATE = 'WY' or STATE = 'UT' 
     or STATE = 'AZ' or STATE = 'CO' or STATE = 'NM' 
     or STATE = 'ND' or STATE = 'SD' or STATE = 'NE' 
     or STATE = 'KS' or STATE = 'OK' or STATE = 'TX' 
     or STATE = 'LA' or STATE = 'AR' or STATE = 'IA' 
     or STATE = 'MN' or STATE = 'HI' or STATE = 'AK' then 'West' 

    when STATE = 'MI' or STATE = 'OH' or STATE = 'PA' 
     or STATE = 'NJ' or STATE = 'WI' or STATE = 'IL' 
     or STATE = 'IN' or STATE = 'KY' or STATE = 'TN' 
     or STATE = 'MS' or STATE = 'AL' or STATE = 'GA' 
     or STATE = 'FL' or STATE = 'SC' or STATE = 'NC' 
     or STATE = 'VA' or STATE = 'WV' or STATE = 'MD' 
     or STATE = 'DE' or STATE = 'CT' or STATE = 'RI' 
     or STATE = 'NY' or STATE = 'MA' or STATE = 'VT' 
     or STATE = 'NH' or STATE = 'ME' then 'East' 
    else null end as 'Territory Selection' 
from contracts 

我的参数应该显示为[全部] [西] [东]。我认为如果我将过滤器设置为[状态] IN [区域选择],它将过滤属于东或西的状态,但它不像预期的那样工作。任何指针将不胜感激!

回答

2
  1. 用复选框'allow null'设置名为'EastWest'的参数。设置一个简单的查询来获取它是像“从查询可用值”数据:

    Select 'West' as Territory 
    union 
    Select 'East' 
    
  2. 创建另一个数据集就像你在上面做了,不过把它放在一个CTE和引用的第一个参数,像这样:

    With a as 
    (
    Select 
        State 
    , case when STATE in ('CA','WA', 'MO', 'OR' ,'NV' ,'ID','MT' ,'WY' ,'UT','AZ' ,'CO' ,'NM','ND' ,'SD' ,'NE' 
         ,'KS' ,'OK' ,'TX','LA' ,'AR' ,'IA','MN' ,'HI' ,'AK') then 'West' 
        when State in ('MI' ,'OH' ,'PA','NJ' ,'WI' ,'IL','IN' ,'KY' ,'TN','MS' ,'AL' ,'GA','FL' ,'SC' ,'NC' 
         ,'VA' ,'WV' ,'MD','DE' ,'CT' ,'RI','NY' ,'MA' ,'VT','NH' ,'ME') then 'East' 
        end as 'Territory Selection' 
    from (State Listing) 
    ) 
    Select State 
    from a 
    where [Territory Selection] = isnull(@EastWest,[Territory Selection]) 
    
  3. 收费仔细注意谓词,因为它本质上指出:

  4. 创建一个“隐藏”的另一个变量称之为'“当变量为null,通过与列回自己选择的一切”小号tates'并将其绑定到您创建的上述数据集。你基本上只需要一个小的变量,然后从某个实际不存在于列中的实际所需的数据中获取所需的数据或....需要一个明确的标签,而不是针对每个状态的实例列出的内容。

  5. 你现在大概已经设置像

    Select (thing) 
    from (real table) 
    where states in (@states) 
    
常规数据