我想比较多个列,并在不同列中显示最大值
对于三列,我提出了以下查询,该工作正常
SELECT CASE
WHEN col1 >= col2
AND col1 >= col3 THEN col1
WHEN col2 >= col1
AND col2 >= col3 THEN col2
WHEN col3 >= col1
AND col3 >= col2 THEN col3
ELSE col1
END AS Max_number
FROM (VALUES (1,2,3),
(1,2,3),
(1,2,3)) tc (col1, col2, col3)
但是当我想要比较超过3列时,事情变得越来越复杂。有没有更简单的方法来做到这一点
答案 0 :(得分:6)
试试这个Table Value Constructor
技巧
SELECT (SELECT Max(col)
FROM (VALUES (col1),
(col2),
(col3)) tc(col)) AS Max_number
FROM (VALUES (1,2,3),
(1,2,3),
(1,2,3)) tc (col1, col2, col3)
此外,它还处理NULL
个值
答案 1 :(得分:2)
作为一个注释,使用case
的逻辑并不像看起来那么难:
SELECT (CASE WHEN col1 >= col2 AND col1 >= col3 THEN col1
WHEN col2 >= col3 THEN col2
ELSE col3
END) AS Max_number
FROM (VALUES (1,2,3),
(1,2,3),
(1,2,3)
) tc (col1, col2, col3) ;
也就是说,您只需要按照返回的顺序比较值。一旦值不是最大值,它就不需要成为比较的一部分。所以,对于四个值:
SELECT (CASE WHEN col0 >= col1 AND col0 >= col2 AND col0 >= col3 THEN col0
WHEN col1 >= col2 AND col1 >= col3 THEN col1
WHEN col2 >= col3 THEN col2
ELSE col3
END) AS Max_number
我更喜欢VR46建议的方法,但是想指出CASE
并不像看起来那么糟糕。