我有一张这样的桌子:
我需要对每条记录的两个最小值求和。例如,在第一行2和4(2 + 4 = 6)。
我可以使用CROSS APPLY来找到每一行的最小值,但是我无法一次找到两个最小值来求和。
谢谢。
答案 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
;