WHERE句でのCASEの使い方についてご教授下さい。
以下の3分岐でSELECTしようとしています。
項目A=1なら、
項目B / 1000=10 のデータを。
項目A=2なら、
項目C=C のデータを。
項目A=3なら、
項目B / 1000=10 かつ項目D=D のデータを。
※しばらくPCに触れないので確認不可ですが以下は試みたい方法です。
ただ心配なのは、例えば項目A=1のときに項目B / 1000 = 10を満たすデータと満たさないデータが存在する場合、
満たすデータまでもが抽出されないのではという心配があります。
SELECT *
FROM テーブル
WHERE 1 =
CASE WHEN 項目A=1 THEN CASE WHEN 項目B / 1000 = 10 THEN 1 ELSE END
WHEN 項目A=2 THEN CASE WHEN 項目C = C THEN 1 ELSE END
WHEN 項目A=3 THEN CASE WHEN 項目B / 1000 = 10 AND 項目D = D THEN 1
ELSE END
ELSE END
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
条件は個々の行に適用されるという事でしょうか?
であるならば、
・項目A=1 かつ 項目B / 1000=10
・項目A=2 かつ 項目C=C
・項目A=3 かつ 項目B / 1000=10 かつ 項目D=D
のどれかを満たすデータを抽出する、ということと同じになり、CASE式を使わなくても記述できます。
例) ------------------------------------
SELECT * FROM テーブル
WHERE
A = 1 AND B / 1000 = 10 OR
A = 2 AND C = 'C' OR
A = 3 AND B / 1000 = 10 AND D = 'D'
----------------------------------------
なお、提示されているSQLでも、細かな文法エラーを修正すれば、意図通りの結果が抽出できるようですよ。
(項目C = 'C'、項目D = 'D'、各ELSE句の値として 0 を追加)
各SQLは PostgreSQL 8.3.7 で確認しました。
回答ありがとうございます。
いまさらですが少し補足があります。
"項目A"とありますが、これは受け渡されたパラメータ項目(@A)です。
質問の記述内容だとテーブル項目のことだと誤解を招きますね・・・。
元々、Where条件は1つだけだったのですが、
パラメータ"@A"の選択値によってSelect条件を変えるということになりました。
また、回答者様のおっしゃるようにCase未使用でも実現できそうですが、
開発標準に準拠せざるを得ないためCaseを使用することになっています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) ExcelVBAでユーザーフォームでテキストボックスなどからセルに連続して入力するコーディングの際の 2 2022/06/29 22:51
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。 3 2022/08/21 20:51
- Excel(エクセル) エクセルの関数 2 2023/01/17 15:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLで特定の項目の重複のみを排...
-
fgetcsvでCSVを取得した際のnul...
-
Zend_DBを使ったselectで文字が...
-
バッチでcsvファイルの指定のカ...
-
COBOL プログラミング
-
FormulaR1C1でSUMIF変数指定
-
初心者)DataGridViewの入力桁...
-
COBOLについて
-
リストビューの項目の内容を変...
-
for whichの使い方
-
差し込み後、元データを変更し...
-
エクセルで最後の文字だけ置き...
-
INSERT文でフィールドの1つだ...
-
グループ毎の最大値を持つデー...
-
VBAのAccessでDATE型のINSERT
-
同一のユーザー、同一商品のと...
-
Exel VBA 別ブックから該当デ...
-
SELECT 文 GROUP での1件目を...
-
Oracleのデータ型、NUMBERについて
-
マイクラPC版のコマンドで効率...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLで特定の項目の重複のみを排...
-
バッチでcsvファイルの指定のカ...
-
COBOLについて
-
リストビューの項目の内容を変...
-
DataViewで複数条件の...
-
php mysql で WHERE句内に変数...
-
Zend_DBを使ったselectで文字が...
-
fgetcsvでCSVを取得した際のnul...
-
ListViewのカラムの色の変更
-
google formsを使ったタスク依...
-
COBOL プログラミング
-
DataGridView 右詰め
-
初心者)DataGridViewの入力桁...
-
Pythonについて
-
前回ご教授いただいたコードに...
-
FormulaR1C1でSUMIF変数指定
-
C# リストビューの値を取得
-
このvbaで指定したフォルダから...
-
VB6リストボックスでの文字...
-
Chromeのデベロッパーツール プ...
おすすめ情報