2016-12-13 29 views
0

パラメータ値に応じて、日付フィールドに対してフィルタリングされたレコードが返されるSSRSレポートのSQLクエリを作成する方法がより効率的ですか?1 =終了日のないすべての行2 =すべての行終了日3 =パラメータ値に関係なくすべての行。私は以下のクエリを思いついたが、ブール値を使うと、条件ごとに重複している文が必要になる(もっと多くの条件を追加する必要がある)。SSRSの条件付きパラメータ

私が持っていたその他の問題/問題は、IFまたはCASE - 。私はCASE/IFは、この場合の理想的なされているかどうかわからない、私は宣言し、それが動作デフォルト値を持つパラメータを設定すると有効でないsclar変数をというエラーメッセージが表示されます。しかしありがとう

SELECT table.field_seq_no, table.field_end_dt, MyTable2.area_off 
FROM table 
INNER JOIN MyTable2 
    ON table.comp_id = MyTable2.comp_id 
    AND table.prty_ref = MyTable2.prty_id 
WHERE ((table.field_end_dt IS NULL) 
    AND (@Parameter = 1) 
    AND (MyTable2.area_off IN (@area)) 
OR ((table.field_end_dt IS NOT NULL) 
    AND (@Parameter = 2) 
    AND (MyTable2.area_off IN (@area)) 
OR ((@Parameter = 3) AND (MyTable2.area_off IN (@area)) 
+0

それはどこにCASE式を使用するように、通常は悪い考えです句。 (最適化が難しいなど) – jarlh

+0

個人的には、私はこれをSSRSの式に移し、 'switch(Parameters!Parameter1.Value = 1、、Parameters!Parameter1.Value = 2、、Parameters!Parameter1.Value = = 3,) ' – JohnHC

答えて

0

もしあれば。?。あなたのクエリをちょうど少し変更してください。@Parameter値のチェックを無視して、実際には繰り返しコードはありません:

select t1.field_seq_no 
     ,t1.field_end_dt 
     ,t2.area_off 

from table t1 
    inner join MyTable2 t2 
    on t1.comp_id = t2.comp_id 
     and t1.prty_ref = t2.prty_id 
     and t2.area_off IN (@area) -- This part is consistent so doesn't need to be repeated. 

where (@Parameter = 1 
     and t1.field_end_dt is null 
    ) 
    or (@Parameter = 2 
     and t1.field_end_dt is not null 
    ) 
    or @Parameter = 3; 
もちろん

あなたはフィルタリング文がJOIN句であってはならないと感じた場合、あなたはいくつかの余分な括弧を使用してWHEREにそれを置くことができます。

select t1.field_seq_no 
     ,t1.field_end_dt 
     ,t2.area_off 

from table t1 
    inner join MyTable2 t2 
    on t1.comp_id = t2.comp_id 
     and t1.prty_ref = t2.prty_id 

where t2.area_off IN (@area) -- This part is consistent so doesn't need to be repeated. 
    and (
     (@Parameter = 1 
      and t1.field_end_dt is null 
     ) 
     or (@Parameter = 2 
      and t1.field_end_dt is not null 
     ) 
     or @Parameter = 3 
    ); 
関連する問題