2017-12-13 8 views
4

私は1つの列 "タイプ"を持つSQLテーブルを持っています。値はA、B、C、Dです。
私は型がパラメータ@typeであるストアドプロシージャを作成しています。
@typeは、画面上のユーザーの選択に基づいて値 'A'または 'A、B、C'または 'ALL'のいずれかを持つことができます。つまり、ユーザーは単一、複数、またはすべてのオプションを選択できます。
カラム "type"の条件を使用してテーブルからデータをフィルタリングする必要があります。"in"を使用してケース内の条件を

私はテーブル形式で値を返すsplit関数を書かれている

select * from maintable where 
(case when @type ='ALL' then 1=1) else 
type in (select data from SplitString(@type,',')) end) 

以下に似た何かをしたいです。

ALLを選択すると、テーブル全体が返されます。特定のタイプが選択されている場合、それらのタイプのみが返されます。

私はsqlserver 2012を使用しています。
親切に助けてください!

+0

どのようにあなたの 'SP'に' IF'の使用について – Sami

答えて

3

これは

SELECT * 
FROM maintable 
WHERE @type ='ALL' OR  
(@type <>'ALL' AND TYPE IN (SELECT data FROM SplitString(@type,',')) 
+0

これは 'SplitString()'ではなく 'STRING_SPLIT()'です – Sami

+0

@Sam彼はこれが彼が書いたUDFだと言います –

+0

ああはい私の悪い:) – Sami

0

あなたは以下のようにそれを行うことができます試してみてください。

if @type ='ALL' 
    set @type ='A,B,C,D' 

select * from maintable where 
type in (select data from SplitString(@type, ',')) 
0

は、あなたが使用することができIF

IF @type ='ALL' 
    SELECT * 
    FROM MainTable 
     ELSE 
      SELECT * 
      FROM MainTable 
      WHERE Type IN (SELECT data FROM SplitString(@type,',')) 
関連する問題