カラムAとカラムAA

または、カラム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が運用で入ることは考えられませんが、
スマートでないので別案を考えていますが、
良案を教えてほしいです。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/01/15 01:48:32
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:oil999 No.2

回答回数1728ベストアンサー獲得回数320

ポイント34pt

カラムの内容が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
id:yayayai

いつもありがとうございますっ!

2013/01/15 01:46:26

その他の回答2件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント33pt

未確認ですが 普通に 全一致の not をとればよいかと思います。

not (
カラムA = カラムAA and
カラムB = カラムBB and
カラムC = カラムCC )

お互いが Nullの場合も 一致すると 判断してよいのですか?

ま、Nullで 一致と みなされるかどうかは 確認してみないと わかりませんが。

あと Nullと 何も入ってないのは 区別しますか?

他1件のコメントを見る
id:taknt

ま、質問にあるように NVLを用いて 記述するしかないと思いますが
!= で or するより = で ANDをとって Notのほうが スマートだとは 思います。

スマートとは 検証しやすい、確認しやすいということです。

2013/01/11 05:53:46
id:yayayai

なるほど。。!= or より AND で NOT ですね。
ありがとうございましたっ!!

2013/01/15 01:45:57
id:oil999 No.2

回答回数1728ベストアンサー獲得回数320ここでベストアンサー

ポイント34pt

カラムの内容が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
id:yayayai

いつもありがとうございますっ!

2013/01/15 01:46:26
id:taroe No.3

回答回数1099ベストアンサー獲得回数132

ポイント33pt
  WHEN NVL(カラムA, '') != NVL(カラムAA, '')
    OR NVL(カラムB, '') != NVL(カラムBB, '')
    OR NVL(カラムC, '') != NVL(カラムCC, '')

多くの人はこういう感じで書くかも。
空文字で問題ないはずですから。

id:yayayai

なるほど。そうなんですね。ありがとうございますっ!!

2013/01/15 01:47:06

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません