我有一张这样的桌子:
我需要对每条记录的最低两个值求和。例如,在第一行2和4 (2 +4= 6)中。
我可以使用CROSS APPLY找到每一行的最低值,但我不能同时找到两个最低值来求和。
提前谢谢。
发布于 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
发布于 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)))
--如果所有条件都不满足,您将不得不决定如何处理:我将结果设置为零。如果添加更多列,这会变得很笨拙
发布于 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
;
https://stackoverflow.com/questions/56313695
复制相似问题