SELECT最大/最小2个或更多字段

时间:2015-11-19 16:06:27

标签: sql sql-server tsql

是否有任何相当于的捷径功能:

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语言是否具有这样的内置函数?

1 个答案:

答案 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;