または、カラムBとカラムBB
または、カラムCとカラムCC これらを比較して
どちらか一致しないものが見つかったら1とするという
case when文を書きたいです。
ただ、それぞれのカラムNullを含む可能性があるので、
単純に比較するとエラーになりますので、
以下のようにしました。(カラムCとカラムCCは数値フィールドです)
, CASE
WHEN NVL(カラムA, '123') != NVL(カラムAA, '123')
OR NVL(カラムB, '123') != NVL(カラムBB, '123')
OR NVL(カラムC, '123') != NVL(カラムCC, '123')
TEHN 1
ELSE '' END FLG
この場合、123が絡むに入っていないこと前提で、
事実123が運用で入ることは考えられませんが、
スマートでないので別案を考えていますが、
良案を教えてほしいです。
カラムの内容がNULL同士だった場合にはTRUEを返したいという要件のようですから、やり方は合っています。
一般的には次のようにします。chr(0)の方がデータとして有り得ない値なので。
CASE WHEN NVL(カラムA, chr(0)) != NVL(カラムAA, chr(0)) OR NVL(カラムB, chr(0)) != NVL(カラムBB, chr(0)) OR NVL(カラムC, chr(0)) != NVL(カラムCC, chr(0)) TEHN 1 ELSE '' END FLG
未確認ですが 普通に 全一致の not をとればよいかと思います。
not (
カラムA = カラムAA and
カラムB = カラムBB and
カラムC = カラムCC )
お互いが Nullの場合も 一致すると 判断してよいのですか?
ま、Nullで 一致と みなされるかどうかは 確認してみないと わかりませんが。
あと Nullと 何も入ってないのは 区別しますか?
ま、質問にあるように NVLを用いて 記述するしかないと思いますが
!= で or するより = で ANDをとって Notのほうが スマートだとは 思います。
スマートとは 検証しやすい、確認しやすいということです。
なるほど。。!= or より AND で NOT ですね。
ありがとうございましたっ!!
カラムの内容がNULL同士だった場合にはTRUEを返したいという要件のようですから、やり方は合っています。
一般的には次のようにします。chr(0)の方がデータとして有り得ない値なので。
CASE WHEN NVL(カラムA, chr(0)) != NVL(カラムAA, chr(0)) OR NVL(カラムB, chr(0)) != NVL(カラムBB, chr(0)) OR NVL(カラムC, chr(0)) != NVL(カラムCC, chr(0)) TEHN 1 ELSE '' END FLG
いつもありがとうございますっ!
WHEN NVL(カラムA, '') != NVL(カラムAA, '') OR NVL(カラムB, '') != NVL(カラムBB, '') OR NVL(カラムC, '') != NVL(カラムCC, '')
多くの人はこういう感じで書くかも。
空文字で問題ないはずですから。
なるほど。そうなんですね。ありがとうございますっ!!
いつもありがとうございますっ!
2013/01/15 01:46:26