- PR -

CASEを使用したSQL文の相違点

1
投稿者投稿内容
むーみん
常連さん
会議室デビュー日: 2005/06/23
投稿数: 41
投稿日時: 2008-03-06 18:03
SQL Server 2005のSSMSを使用してクエリを発行しているのですが、以下の4つのselect文は同じ意味ではないのでしょうか。
同じだと思っていたのですが。。。

最初4のように記述していたら意図する結果が取れず、2のように書き直したら
意図する結果が取れました。
3は意図する結果になりませんでした。
意図する結果というのは、備考に"第1倉庫"〜"第5倉庫"を含まないレコードの
入庫数の合計値です。
1と2は同じ結果を返しました。1は、意図する結果を返すのは分かるのですが。。

これは私が根本的にSQL文を理解していないのでしょうか。。
VBの式の場合は、意味としては、2と3は同じだと思うのですが。。。

どなたか、アドバイスしていただける方がいらっしゃいましたらお願いいたします。

コード:
1.
select sum(case when 備考 like '%第1倉庫%' then 入庫数量
                when 備考 like '%第2倉庫%' then 入庫数量
                when 備考 like '%第3倉庫%' then 入庫数量
                when 備考 like '%第4倉庫%' then 入庫数量
                when 備考 like '%第5倉庫%' then 入庫数量
                else 0 end)
2.
select sum(case when 備考 like '%第1倉庫%'
                  or 備考 like '%第2倉庫%'
                  or 備考 like '%第3倉庫%'
                  or 備考 like '%第4倉庫%'
                  or 備考 like '%第5倉庫%' then 0
                else 入庫数量 end)

3.
select sum(case when not (備考 like '%第1倉庫%'
                  or 備考 like '%第2倉庫%'
                  or 備考 like '%第3倉庫%'
                  or 備考 like '%第4倉庫%'
                  or 備考 like '%第5倉庫%') then 入庫数量
                else 0 end)

4.
select sum(case when 備考 not like '%第1倉庫%'
                 and 備考 not like '%第2倉庫%'
                 and 備考 not like '%第3倉庫%'
                 and 備考 not like '%第4倉庫%'
                 and 備考 not like '%第5倉庫%' then 入庫数量
                else 0 end)

from 入庫マスタ

むーみん
常連さん
会議室デビュー日: 2005/06/23
投稿数: 41
投稿日時: 2008-03-06 18:43
すみません。。。

NULLのレコードを考えていませんでした。
NULLがないという前提でしか、1と2と3と4は同じ意味ではなかったです。
大変申し訳ありません。
1

スキルアップ/キャリアアップ(JOB@IT)