質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

2回答

472閲覧

[SQL]指定条件時に「~以外」のデータを取得したい

N_N

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2022/05/24 14:48

SQLで以下のような抽出条件を書きたいのですが、お知恵を拝借ください。

  • 変数値が'1'のときは、フラグが1ではないデータ
  • '1'以外の場合は、フラグの条件は指定しないデータ

下記のようなCASE文での等号条件は調べて出てきたのですが、
特定の条件(変数値 = '1')の時にだけ、「~以外」(Table1.flg<>1)となるような
データの抽出方法は無いでしょうか?

SQL

1AND Table1.flg = CASE 変数値 = '1' THEN 1 ELSE Table1.flg END

実現したい雰囲気

SQL

1SELECT * 2FROM Table1 3WHERE Table1.hoge1 = xxx 4AND Table1.hoge2 = yyy 5AND CASE 変数値 = '1' THEN Table1.flg <> 1 ELSE Table1.flg = Table1.flg END

※変数の値は別の処理で渡されるため、実際のSQLは CASE '1' = '1' THEN のようになります

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こうですね。

SQL

1WHERE ( 2 (変数値 = '1' AND Table1.flg <> 1) 3 OR (変数値 <> '1') 4 )

投稿2022/05/24 15:08

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ありえない値(9999とか-1*Table1.flgとか)使って否定で書けばどう?

SQL

1where not (Table1.flg = case when @変数値='1' then 1 else 9999 end) 2 3where Table1.flg <> case when @変数値='1' then 1 else -1*Table1.flg end

フラグの全内容が羅列できるなら1以外を全部書くっていうのもあり
例えばフラグが0か1か2だけの場合は
変数値にかかわらずflgが0と2は確定で出るので
変数値が'1'の時だけ1が入らないようにする

SQL

1where Table1.flg in (0 2 ,case when @変数値='1' then 0 else 1 end  3 ,2)

投稿2022/05/24 22:31

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問