1

私はSQLに比較的慣れていません-これを正しく行っているかどうかはわかりません。きれいな写真を追加しました。パラメータを入力するクエリがあります(ドロップダウンメニューから入力した別のパラメータに基づいています。これは、表示される@ResponseRange変数です)。

SELECT  
CASE
 WHEN crr.Name = 'Prescreens'  THEN  null
ELSE crr.Codes 
END
FROM      Client_Response_Ranges_for_SSRS_Respondent_Answer crr
where  crr.Codes  = @ResponseRange;

これはそのcrrテーブルがどのように見えるかです(それはクエリ用の単なるカスタムテーブルでした):

ここに画像の説明を入力してください ここに画像の説明を入力してください

ResponseRange ここに画像の説明を入力してください

詳細:6つのパラメーターがあります。

BeginDate

EndDAte

SurveyID

SupplierID

ResponseRange

ClientResponseRange

重要なのは、ClientResponseRangeがResponseRangeに依存しているため、実際にはClientResponseRangeは非表示になっているということです。1つを除くResponseRangeのすべての選択肢について、ClientResponseRangeのResponseRangeの値を自動的に使用します。私は何か間違ったことをしているのですが、何が起こっているのかわかりません。

4

3 に答える 3

3

私はあなたがやろうとしていることを理解していると思います。クエリを次のように変更することをお勧めします。

SELECT  
CASE
WHEN crr.Name = 'Prescreens'  THEN  null
ELSE crr.Codes 
END
FROM      Client_Response_Ranges_for_SSRS_Respondent_Answer crr
WHERE  (@ClientResponseRange = 'All')
    OR (@ClientResponseRange = 'Completes' AND crr.Codes IN (10,11,12 /* etc... */ )
    OR (@ClientResponseRange = 'Over Quota' AND crr.Codes IN (40,42,43 /* etc... */ )
  /* etc ... put the rest of your cases here */

そうすれば、おそらくResponseRange変数を取り除くことができます。

さらに良い解決策は、データベースに次のようなテーブルを作成することです。

CREATE TABLE CodesAndResponses (
  CodeID INT,
  ResponseRange VARCHAR(10)
)

INSERT INTO CodesAndResponses VALUES ('Completes', 10)
INSERT INTO CodesAndResponses VALUES ('Completes', 11)
--etc...

そして、クエリでそれに参加します。これにより、レポートのクエリを変更することなく、どのコードがどのカテゴリに対応するかを管理できます。

于 2012-12-31T03:57:28.607 に答える
1

これは、クエリがチェックしようとしているためですNULL = NULL

それがあなたがしたいことであるならば、これをあなたのクエリに加えてください:

SET ANSI_NULLS OFF

ただし、クエリにはいくつかのあいまいさがあります。

  1. 「プレスクリーン」のコードの値が、プロパティページの「3」によってテーブルにNULLとして表示されるのはなぜですか?
  2. @ResponseRangeにクエリ出力を入力しようとしている場合、パラメータはどこで宣言されていますか?
  3. また、この変数を設定する方法は正しくありません。
  4. 変数が事前入力されている場合、どのように入力されているかも教えてください。

ラージ

于 2012-12-31T04:38:16.003 に答える
1

確かではありませんが、ResponseRangeは値のリストのようです。この場合、このようなin句が必要です。

SELECT CASE 
          WHEN crr.Name = 'Prescreens' THEN null 
          ELSE crr.Codes 
       END 
FROM Client_Response_Ranges_for_SSRS_Respondent_Answer crr 
where crr.Codes IN (@ResponseRange);
于 2012-12-31T03:50:12.857 に答える