首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将记录中最低的两个值相加

将记录中最低的两个值相加
EN

Stack Overflow用户
提问于 2019-05-26 20:54:31
回答 3查看 50关注 0票数 2

我有一张这样的桌子:

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

我可以使用CROSS APPLY找到每一行的最低值,但我不能同时找到两个最低值来求和。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-26 21:06:27

我会这样做:

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;

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

更一般的情况下,我会使用这样的东西:

select id, sum2
from t cross apply
     (select sum(val) as sum2
      from (select top (2) val
            from values (value1), (value2), (value3) v(val)
            order by val asc
           ) v
     ) v
票数 3
EN

Stack Overflow用户

发布于 2019-05-26 21:01:50

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)))

--如果所有条件都不满足,您将不得不决定如何处理:我将结果设置为零。如果添加更多列,这会变得很笨拙

票数 0
EN

Stack Overflow用户

发布于 2019-05-27 05:22:23

初始数据:

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
;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56313695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档