0

さまざまな状態の列を含むレポートがあります。個々の州ではなく東と西だけを持つパラメーターからこれらの州をフィルター処理するにはどうすればよいですか?

州リストの私のクエリは次のとおりです。

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

私のパラメーターは [All][West][East] と表示されます。フィルターを [State] IN [Territory Selection] に設定すると、州が東または西に属するものとしてフィルター処理されると思いましたが、期待どおりに機能しません。任意のポインタをいただければ幸いです!

4

1 に答える 1

2
  1. 「EastWest」というパラメータを「allow null」チェックボックスで設定します。次のような「クエリから使用可能な値」のデータを取得する単純なクエリを設定します。

    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. 基本的に次のように述語に注意してください。「変数がnullの場合、列をそれ自体に関連付けてすべてを選択します」

  4. 「非表示」の別の変数を作成し、それを「states」と呼び、作成した上記のデータセットにバインドします。基本的に、小さな変数の 1 つの変数を取得し、事前に列に存在しなかった実際のものから必要なデータを取得します。または、状態のインスタンスごとにリストされたものではなく、個別のラベルが必要でした。

  5. おそらく、次のような通常のデータセットがあります

    Select (thing)
    from (real table)
    where states in (@states)
    
于 2013-05-08T21:30:40.643 に答える