2016-12-12 11 views
1

where句に1行以外のすべてが同じクエリを使用する7つのレポートがあります。これらを1つのレポートに結合し、選択したレポートタイプに基づいて行を変更するにはどうすればよいですか。SSRS 2016 - パラメータの選択に基づいて一部のSQLを変更する

コード例でa.code発言aからa.remarkを選択 (:rpt_parm)

:rpt_parmは7つのオプションがありますが、私は、クエリが、私が入れた値のリストを受け入れることを得るように見えることはできません値を返すか、リストを返すデータセットを使用します。

注意SS2016をVS2015とOracleデータベース接続で使用しています。

+0

これを行う方法があります。私たちは、すべてのSQLとパラメータのオプションを参照する必要があります。 –

+0

@WesPalmer私が本当にしたいのは、a.remarkをここから選択してください:rpt_parmしかし、私は上記で取り除くことができます。レポートタイプは、POU備考、POD備考などです。( 'P100'、 'P105'、P0110 ')または(' P200 '、' P205 '、' P210 'など)の値を持ちます。 ...それを使用するクエリの値フィールドにリストを適切に取得するにはどうすればよいですか? – SnowXTC

答えて

0

リストでカンマ区切りのリストを意味しますか?

SSRSレポートから、これを実行する最適な方法は、パラメーターリストをストアドプロシージャに渡すことです。これは単一値の文字列として受け入れられます。ストアドプロシージャ内では、文字列を文字列テーブルに分割し、テーブルを使用して文字列値フィールドに基づいて残りのクエリに結合する必要があります。

0

あなたは、単にこのようなレポートタイプのものを(MS-SQL ...申し訳ありません周り蹴りOracleインスタンスを持っていない)を受け入れるためにあなたのクエリを変更することができます。

declare @report_type int; 
select * 
from remarks a 
where (@report_type = 'POU Remarks' and a.remarks in ('P100', 'P105', 'P0110')) 
or  (@report_type = 'POD Remarks' and a.remarks in ('P200', 'P205', 'P210')) 
or  ...; 
+0

クエリに対して別のストアドプロシージャを実行する必要がありますか? – SnowXTC

+0

必要な場合のみ。クエリは、レポート内のデータセットに埋め込むことができます。チューニングが必要だが多くの人がクエリを埋め込むだけであれば、dbaに与えるのがより簡単になるように、レポートごとにプロシージャを作成するのが一般的です。複数のレポートで同じクエリを使用する場合は、共有データセットを使用します。 – SMM

0

https://dataqueen.unlimitedviz.com/2013/10/how-to-use-a-delimited-string-in-a-multi-valued-parameter/

このすごくうまくいった。パラメータ内の各オプションの値のカンマ区切り文字列、次にクエリのパラメータ部分では、split関数を使用します。

私はSSRSの初心者ですが、年末までに100のDiscovererレポートをSSRSに変換するのは非常に困難です。しかし、私のプログラミングのOCDは、私が可能な限り正しくそれをやりたいのです。

私は多くの助けを感謝します。

NEGATE THE ABOVEは、それだけで私は私が正しく質問を理解し、私はそれに打撃を与えるだろうことを確認していないLIST

0

の最初の値を戻しました。

テーブルhelperと、optionvalueの2つの列を持つことができると思います。各オプションには、そのオプションの値と同じ数の行があります。 (その値は、その値を使用するオプションと同じくらい何回も表示されます)

次に、オプション番号、たとえば:optionを入力します。あなたのクエリは次のようになります。

... where a.code in (select value from helper where option = :option) 

パフォーマンスが問題であるならば、あなたはoptionにインデックスを置いてもよいです。カンマで区切られた文字列に基づいたソリューションよりも優れています。

関連する問題