SQL Service实现同一行几个字段的比较(最小值、最大值等)

时间:2021-04-28 19:16:03

SQL Service实现同一行几个字段的比较,有很多方法,常用的是CASE WHEN进行判断,但如果涉及到的字段非常多,case情况有很多种时就比较难写了,

个人觉得如下方法是个不错的选择,先看一个简单的例子,

SELECT

(SELECT  MIN(NUM) NUM FROM (VALUES(COL1),(COL2) ) AS #TEMP_NUM(NUM) ) NUM

FROM  TABLE1

解析一下这句话的意思就是,从TABLE1中选择COL1,COL2作为一个临时表 “#TEMP_NUM(NUM自定义字段名) ”,

再从临时表中用聚合函数选择最小值MIN(NUM),达到同一行数据多个字段之间相互比较的效果,同理可以举一反三,

用于更复杂一些的计算,比如:

 

SELECT

(SELECT MIN(NUM) NUM FROM (VALUES(FLOOR((RruNewTdd-[RruNum])/[RruNum])),(FLOOR((CellNewTdd-[PhyCellNum])/[PhyCellNum]))) AS #TEMP_NUM(NUM)) NUM

FROM TABLE1