dポイントプレゼントキャンペーン実施中!

<環境>sqlserver

SQLでパラメータが空白であれば全件取得、パラメータに値が設定されている場合には
条件にHITするデータを抽出したいのですが、一本のクエリで抽出することができるのでしょうか?

空白時パラメータは以下のとおり入ってきます。
@no=""…完全一致
@name="%%"…部分一致

例)
SELECT *
FROM テーブル
WHERE
(NO = @no)
and ((@name IS NULL) OR (@name IS NOT NULL) AND (NAME LIKE @name))

NAMEは上記クエリにて取得できています。
NOのところはどのようにすればよいでしょうか?

A 回答 (4件)

ああ、単純な記述ミスでした。



No=Case when @no is null then No else @no end

*↑でなぜ条件をみたすのかは理解できているでしょうか?
 あと、Case文の文法は自分で調べましたか?
 というのはちょっと気になります。
 
    • good
    • 1
この回答へのお礼

前回の回答の後、自分なりに調べできました。
今まで、CASE文をWHERE句に使ったことがなく勉強になりました。
ありがとうございました。

お礼日時:2011/09/14 00:32

Case文を使うととりあえず対応は可能かと…。


No=Case @no is null then No else @no end

この回答への補足

SELECT *
FROM テーブル
WHERE
([NO] = CASE @no IS NULL THEN [NO] ELSE @no END)
AND
((@name IS NULL) OR (@name IS NOT NULL) AND ([NAME] LIKE @name))

でエラーとなります。何度もすみませんが添削お願いします。

補足日時:2011/09/13 15:37
    • good
    • 0

>完全一致は仕様のため変更できないのです



とありますが、たとえばNOが5ケタ固定長の場合

WHERE NO LIKE '12345%'



WHERE NO = '12345'

は変わらない結果が得られると思いますが。


>テーブルを作成

他には空白時とそうでない場合でsqlcommandを

PGで切り替えるとかでしょうか。。。
    • good
    • 0

検索速度を犠牲にしてよいのなら



NAMEと同じように空白時に

@no = "%"

で入るように変更し

WHERE (NO LIKE @no)

でよいのでは

この回答への補足

説明不足だったのですが、一本で抽出したいのはgridviewのdetasorceをsqlcommandでやりたいためです。完全一致は仕様のため変更できないのです
sqlcommandでせずvb側でテーブルを作成したほうがいいかな?

補足日時:2011/09/13 02:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す