私は主にSQLServerを使用していますが、プロシージャ等で条件によってWHERE句を変えたいときがあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
CREATE PROCEDURE prTest @KBN INT, @CODE INT AS BEGIN IF @KBN = 1 BEGIN SELECT ID FROM TEMP WHERE ACODE = @CODE END ELSE BEGIN SELECT ID FROM TEMP WHERE BCODE = @CODE END END |
こんな感じで書いていました。
これはまだ短いのでいいですが、膨大な列を取得する場合など、WHERE句がちょっと違うだけでかなり長いプロシージャになってメンテも大変でした。
そんなときに発見したのがWHERE句でCASE文を使うやり方です。
上のプロシージャはこんな風に書けます。
1 2 3 4 5 6 7 |
CREATE PROCEDURE prTest @KBN INT, @CODE INT AS BEGIN SELECT ID FROM TEMP WHERE CASE WHEN @KBN = 1 THEN ACODE ELSE BCODE END = @CODE END |
1行になりました。
WHERE句のCASE文で@KBNの値によって条件とするフィールドを切り替えています。
業務システム開発では請求先での集計や店舗での集計等、グループ化するコードが違うだけで納品数や納品額、粗利等、他の項目は同じ場合が多いです。
そんなときに使えるWHERE句でのCASE分です。
ORACLEでも使えると思います。
応用するとこんなことも可能です。
1 2 3 4 5 6 7 8 |
CREATE PROCEDURE prTest @KBN INT, @CODE INT, @CODE2 INT AS BEGIN SELECT ID FROM TEMP WHERE CASE WHEN @KBN = 1 THEN ACODE ELSE BCODE END = CASE WHEN @KBN = 1 THEN @CODE ELSE @CODE2 END END |
スポンサーサイト
アフィリエイトはエーハチネット
ドメイン取るならお名前.com