是否有任何相当于的捷径功能:
CASE
WHEN FieldA > FieldB
THEN FieldA
WHEN FieldA < FieldB
THEN FieldB
END
显然,这个并不难写,但是说你有更多的比较要做,即
CASE
WHEN FieldA > FieldB
AND FieldA > FieldC
AND FieldA > FieldD
THEN FieldA
WHEN FieldA < FieldB
AND FieldC < FieldB
AND FieldD < FieldB
THEN FieldB
...
END
它会非常麻烦。我知道可以创建一个UDF来处理这个问题,或者你可以做类似的事情:
SELECT MAX(Field) FROM
(
SELECT FieldA AS Field
FROM Table
UNION ALL
SELECT FieldB AS Field
FROM Table
UNION ALL
SELECT FieldC AS Field
FROM Table
UNION ALL
SELECT FieldD AS Field
FROM Table
)
但是TSQL中有任何快捷方式吗?出于好奇,其他DBMS语言是否具有这样的内置函数?
答案 0 :(得分:3)
您似乎想要的是greatest()
和least()
。大多数数据库提供这些非常有用的功我们可以游说微软添加它们。
与此同时,使用apply
可以解决这个问题:
select t.*, maxcol
from t cross apply
(select max(col) as maxcol
from (values (fieldA), (fieldB), (fieldC)
) v(col)
) m;