teratail header banner
teratail header banner
質問するログイン新規登録

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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

1回答

273閲覧

SQL Serverにおけるwhere句でのcase whenの使い方について

aminaka777

総合スコア1

SQL Server

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2025/06/20 01:31

0

1

実現したいこと

SQL Serverにおいて、where句にcase whenを使いたいです。
(例)
select
hoge
from
temp1
where
col1=1
and
case when
col2=2 then col3=3 and col4=4
case when
col5=5 then col6=6 and col7=7
end

発生している問題・分からないこと

then 後の最初の=のところで、「'=' 付近に不適切な構文があります」のエラーがでます。

エラーメッセージ

error

1'=' 付近に不適切な構文があります。 2

該当のソースコード

SQL

1select 2 hoge 3from 4 temp1 5where 6 col1=1 7 and 8 case when 9 col2=2 then col3=3 and col4=4 10 case when 11 col5=5 then col6=6 and col7=7 12end

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

同様の試みが見つかりませんでした。

補足

特になし

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

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

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

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

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

FKM

2025/06/20 02:51 編集

case when 後には質問文、その後のthenには値が来ます。 あとSQLの=は厳密には代入ではなく、代入することによって成立する真偽の判定です。
aminaka777

2025/06/20 06:05 編集

回答ありがとうございます。 thenには値が来る、とのことですが、ここに比較を書くことはできないのでしょうか?
YAmaGNZ

2025/06/20 06:39

>col2=2 then col3=3 and col4=4 ここの部分はどういう意味として書いていますか? col2=2かつcol3=3かつcol4=4のデータを引っかけたいのですか? それとも col2が2の時はcol3に3、col4に4を代入したいといった意味で書いてますか? もし前者であるならyambejpさんの回答のように普通に条件を書けばいいと思います。
aminaka777

2025/06/20 07:51

回答ありがとうございます。 ここは、col2=2のとき、whereの条件をcol3=3 and col4=4にしたい、という意味です。 可能でしょうか?
YAmaGNZ

2025/06/20 08:17

>col2=2のとき、whereの条件をcol3=3 and col4=4にしたい それは col2=2 and col3=3 and col4=4 ではないのですか? というかyambejpさんの回答ではダメなのですか?
FKM

2025/06/20 23:07 編集

入れ子にすることで理論上は可能ですけど、回答者の通りand文とor文を組み合わせたほうが賢明な気がします。まずは回答者の通りにやってみては? どちらかというとcase文はselect句で使うことが多いのと、where句にcase文を使うと確実に処理が遅くなります(確定した値を別の値に振り分けるのと、条件で振り分けるのではケースがまるで違うので)
aminaka777

2025/06/23 07:53 編集

コメントありがとうございます。試したところ問題が解決しました! ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
guest

回答1

0

case whenは戻り値を返すだけですからthenの中で代入はできません
ご提示のものだとこんな感じでよいのでは?

aql

1where 2col1=1 3and ( 4(col2=2 and col3=3 and col4=4) or 5(col5=5 and col6=6 and col7=7) or 6(col2<>2 and col5<>5) 7)

投稿2025/06/20 02:39

yambejp

総合スコア117846

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問