質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

4208閲覧

SQLserver IIFの動きに関して

mahry

総合スコア37

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2020/02/03 01:52

編集2020/02/03 02:20

前提・実現したいこと

SQL Serverについて勉強しています。
用意されたSQLの例文を見ながら、自分でも実行してみたりして動きを見ているのですが、
今日初めてIIFという倫理関数を見ました。
このIIFは「式、式が真の場合、式が偽の場合」という書き方をして、真偽どちらかを返すというCASE句のようなものだと思っています。
検索ブラウザなどで「SQL IIF」で検索すると
SQL ServerのIIF 値を評価する
上記リンク先のようなものがヒットして、なるほどと一度納得したのですが、
今日見たIIFの例文ではCASE句と一緒に使われており、2番目のクエリではダメな理由はなんでしょうか。

SQL

1SELECT 2CASE WHEN B.Id IS NULL THEN 3 IIF (COALESCE(A.PostCode,'') = '','',A.PostCode) + A.Address1 + A.Address2) 4ELSE 5 IIF (COALESCE(B.PostCode,'') = '','',B.PostCode) + B.Address1 + B.Address2) 6END ADDRESS_CODE 7FROM ADDRESS_1 A 8LEFT JOIN ADDRESS_2 B 9ON B.Id = A.Id

上記クエリに対して、下記のクエリでもエラーなく実行できたのですが、
上記のクエリがIIFを用いている理由がよくわからなかったためご質問させていただきます。

SQL

1CASE WHEN B.Id IS NULL THEN 2(CASE WHEN COALESCE(A.PostCode,'') = '' THEN '' ELSE A.PostCode) END ) + A.Address1 + A.Address2 3ELSE 4(CASE WHEN COALESCE(B.PostCode,'') = '' THEN '' ELSE B.PostCode) END ) + B.Address1 + B.Address2 5END ADDRES_CODE

単なる記述者の好みで、特にどちらであってもクエリの実行速度や不具合を起こしやすいわけではない、のでしょうか。
書き方の好みだけということでしたらくだらない質問をしてしまって申し訳ないです。

補足情報(FW/ツールのバージョンなど)

SQL Server 2014

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/02/03 01:54

> 下記のクエリではダメなのでしょうか? 何かエラーが出たのでしたら、それを書いてください。
mahry

2020/02/03 02:16

コメントありがとうございます。 エラーが出たわけではなく、下記のクエリでも実行可能なはずなのに、なぜIIFの方が使われているのか呑み込めなかったためご質問させていただきました。私の書き方だとエラーが出たように受け取れそうなので、文言を修正します。
guest

回答2

0

ベストアンサー

IIF は CASE 式の簡略版です

データベースは他のDBに移植されることもありうるので、なるべく標準的な記述方法のCASEで書いておいたほうが良いでしょう。

投稿2020/02/03 02:08

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例文を作った方の意図はわかりませんが、下記のクエリでも問題ないのでは?

投稿2020/02/03 02:14

quzq

総合スコア185

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問