对记录中的两个最低值求和

时间:2019-05-26 12:54:31

标签: sql sql-server

我有一张这样的桌子:

enter image description here

我需要对每条记录的两个最小值求和。例如,在第一行2和4(2 + 4 = 6)。

我可以使用CROSS APPLY来找到每一行的最小值,但是我无法一次找到两个最小值来求和。

谢谢。

3 个答案:

答案 0 :(得分:2)

我会这样:

<asp:MenuItemBinding DataMember="SiteMapNode" EnabledField="Title" TextField="Title" NavigateUrlField="url"/>

如果您有三个项目,则最小的两个项目之和就是所有项目的总和减去最大的项目。

更一般地,我会使用类似这样的东西:

select id, sumval - maxval
from t cross apply
     (select sum(val) as sumval, max(val) as maxval
      from values (value1), (value2), (value3)) v(val)
     ) v;

答案 1 :(得分:0)

SELECT 
 IIF (VALUE1 < VALUE3 AND VALUE2 < VALUE3, 
       VALUE1 + VALUE2,
       IIF(VALUE1 < VALUE2 AND VALUE3 < VALUE2, 
        VALUE1 + VALUE3, 
        IIF(VALUE3 < VALUE1 AND VALUE2 < VALUE1, 
         VALUE2 + VALUE3, 0)))

-如果不满足任何条件,您将必须决定要做什么:我将结果设置为零。如果您添加更多列,则会变得笨拙

答案 2 :(得分:0)

初始数据:

DECLARE @Table TABLE (ID INT IDENTITY(1,1),Value1 INT, Value2 INT, Value3 INT);
INSERT INTO @Table (Value1,Value2,Value3) VALUES
     (2,4,5)
    ,(3,7,2)
    ,(9,1,6)
;

代码:

SELECT a.ID,SUM(a.[Value]) AS [Sum]
FROM (
    SELECT p.ID,p.Value
        ,ROW_NUMBER()OVER(PARTITION BY p.ID ORDER BY p.Value ASC) AS [rn]
    FROM @Table t
    UNPIVOT(Value FOR Param IN ([Value1],[Value2],[Value3])) p
) a
WHERE a.rn <= 2 /*pick up only two lowest*/
GROUP BY a.ID
;