![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
多くの選択項目を処理(SELECT)するストアド
とあるデータ検索において、選択項目が10項目以上あり各項目の値をパラメータとして受取り、
該当データを返すストアドを検討しています。
項目が省略された場合は Null値がパラメータとして入ってきて、その項目は条件から除外します。
(全ての項目が省略されたら、全てのレコードが返される)下記の様な方法を考えています・・・
-----------------------------------------------------------------
if @para1 is null
if @para2 is null
if @para3 is null
select * from TBL
else
select * from TBL where koumoku3 = @para3
else
if @para3 is null
select * from TBL where koumoku2 = @para2
else
select * from TBL where koumoku2 = @para2 and koumoku3 = @para3
else
if @para2 is null
if @para3 is null
select * from TBL where koumoku1 = @para1
else
select * from TBL where koumoku1 = @para1 and koumoku3 = @para3
else
if @para3 is null
select * from TBL where koumoku1 = @para1 and koumoku2 = @para2
else
select * from TBL where koumoku1 = @para1 and koumoku2 = @para2 and koumoku3 = @para3
------------------------------------------------------
三つでも面倒なのに10項目以上では考えられません。
こんな時どのように作り込めばいいのでしょうか
動的ストアドにして where文自体を編集した物を渡す事も考えましたが、
エクセル出力時のパラメーター長の制限(?)で断念しました。
省略されなかった項目だけでデータを選択したいような事は多々あると思うのですが、
そんな時のオーソドックスは方法はどんな方法なんでしょうか?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
私の場合は、以下のようにCASEを使って処理しています。
select * from TBL where
case when @para1 is not null then @para1 else koumoku1 end = koumoku1
and case when @para2 is not null then @para2 else koumoku2 end = koumoku2
and case when @para3 is not null then @para3 else koumoku3 end = koumoku3
簡潔になると思いますが、如何でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- Oracle SQL update方法 2 2022/06/22 14:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
datetime型でNULL値を入れたい。
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
SQLで特定の項目の重複のみを排...
-
エクセルで最後の文字だけ置き...
-
SELECT 文 GROUP での1件目を...
-
外部参照してるキーを主キーに...
-
SQLで列名を変数にできないでし...
-
INSERT文でフィールドの1つだ...
-
テーブル列数とデータファイル...
-
Exel VBA 別ブックから該当デ...
-
SQLServerで文字列の末尾からあ...
-
Outlook 送受信エラー
-
EXISTSを使ったDELETE文
-
VBA Scripting.Dictionary 連想...
-
JANコードとPOSコードは同じ?
-
SQLによる"あいうえお"順でソー...
-
DataViewで複数条件の...
-
[MySQL] 3つのテーブルの結合で...
-
カーソル0件の時にエラーを発生...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
datetime型でNULL値を入れたい。
-
積み上げ棒グラフのためのSQL S...
-
多くの選択項目を処理(SELECT)...
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
SELECT 文 GROUP での1件目を...
-
1、Rstudioで回帰直線を求める...
-
for whichの使い方
-
カーソル0件の時にエラーを発生...
-
SQLで特定の項目の重複のみを排...
-
EXISTSを使ったDELETE文
-
SQLServerで文字列の末尾からあ...
-
1日に1人がこなせるプログラム...
-
列のヘッダーを含めるのをデフ...
-
INSERT文でフィールドの1つだ...
-
SQL Date型の列から年月だけを...
-
access2003 クエリSQL文に...
-
重複していないレコードの抽出...
おすすめ情報