SqlServerでOracleやPostgresでのGreatestに該当する関数が無いので面倒だ。
自作関数を作成しようとしても配列型のパラメータは無い。
「テーブル値パラメータ」を配列のように使用することも可能ではあるが、
そのテーブルを作成し値を入るというのが、これまた面倒。
COALESCE()ではパラメータ数に制限が無いので、同様のパラーメータ型が提供されれば、
事なきを得るのにと思うことしきり。
まあ、そもそもそんなパラメータ型が提供されるときには、greatest()などの関数も一緒に提供される可能性が高い。
そこで自作関数はあきらめて、SQLの記述だけで何とかしてみた。
テーブル値コンストラクターをFROM句の派生テーブルとして使用する。
カラム(A,B,C)を持つテーブルXで、A,B,Cの項目のうち最大値を求める場合
select
(select max(item) from (values (A),(B),(C)) as list(item)) as max_value
from x
やっているのは、サブクエリ―で派生テーブルからの最大値を求めているだけ。
min()に変更すればLeast()と同様だ。
sqlserverでは、greatest()の記述が冗長だと思うことにしよう。
自作関数を作成しようとしても配列型のパラメータは無い。
「テーブル値パラメータ」を配列のように使用することも可能ではあるが、
そのテーブルを作成し値を入るというのが、これまた面倒。
COALESCE()ではパラメータ数に制限が無いので、同様のパラーメータ型が提供されれば、
事なきを得るのにと思うことしきり。
まあ、そもそもそんなパラメータ型が提供されるときには、greatest()などの関数も一緒に提供される可能性が高い。
そこで自作関数はあきらめて、SQLの記述だけで何とかしてみた。
テーブル値コンストラクターをFROM句の派生テーブルとして使用する。
カラム(A,B,C)を持つテーブルXで、A,B,Cの項目のうち最大値を求める場合
select
(select max(item) from (values (A),(B),(C)) as list(item)) as max_value
from x
やっているのは、サブクエリ―で派生テーブルからの最大値を求めているだけ。
min()に変更すればLeast()と同様だ。
sqlserverでは、greatest()の記述が冗長だと思うことにしよう。