- Home
- SQL Server, SSRS
- [SQL Server]Like 演算子での否定
あいまい検索での否定
○○以外の書き方
あいまい検索での否定は「[^任意の文字・文字列]」と書く。
例えば、「[^abc]」や「[^a-c]」なら「abc」以外となる。
SQLと解説
解説
下記データがある、このテーブルには商品ごとに予算と実績が記録される。
これを、コンボボックス(ドロップダウン)で下記のようなデータ抽出条件を与えたい。
全て:全てのレコード
マイナス:予算・実績のどちらかがマイナス計上されたもの
0以外:予算・実績のどちらも計上されていないものを除外
下記ソースでは、抽出条件「DSP」は
「予算・実績のどちらか1つでもマイナス」なら’M’。
「予算・実績のどちらも0」なら’Z’。
それ以外は’A’が格納される。
そうした場合に、コンボボックス(ドロップダウン)の値は
「全て」:’%’
マイナス:’M’
0以外:'[^Z]’
を渡せばよい。
SQL例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
/* @Dsp(例えばコンボボックス)の値 '%':全て取得 'M':予算と実績のどちらかがマイナスを取得 '[^Z]:予算・実績共にゼロ(計上されていない)以外の商品を取得 */ DECLARE @Dsp varchar(4) = '%' DECLARE @TABLE table ( ID int NOT NULL, -- ID(主キー) ITEM_ID varchar(4) NOT NULL, -- 商品ID ITEM_NM varchar(50) NOT NULL, -- 商品名 YOSAN int NOT NULL, -- 予算 JISSEKI int NOT NULL -- 実績 ) INSERT INTO @TABLE VALUES (1,'0001','商品A',500,300) INSERT INTO @TABLE VALUES (2,'0002','商品B',700,-20) INSERT INTO @TABLE VALUES (3,'0003','商品C',0,0) ; WITH MAIN AS ( SELECT ID, ITEM_ID, ITEM_NM, ( CASE WHEN -- 予算・実績のどちらか1つでもマイナス YOSAN < 0 OR JISSEKI < 0 THEN 'M' WHEN -- 予算・実績全てがゼロ ABS(YOSAN) + ABS(JISSEKI) = 0 THEN 'Z' ELSE 'A' END ) AS DSP, YOSAN, JISSEKI FROM @TABLE ) SELECT * FROM MAIN WHERE DSP Like @Dsp |
注意点
SSRSなどのBIツールでは、コンボボックス(ドロップダウン)の値に上記の例でいう「[^Z]」を指定することができないものがある。
その場合、コンボボックスの値には「Z」などを指定して、クエリ内のIF文で置き換える必要がある。
1 2 3 4 |
-- 「@InputDsp」はSSRSのパラメータ名 -- 「@Dsp」はクエリで使用するパラメータ DECLARE @Dsp varchar(4) = '' IF @InputDsp = 'Z' SET @Dsp = '[^Z]' ELSE SET @Dsp = @InputDsp |
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。