在T-SQL中聚合GREATEST

les*_*ode 2 t-sql

我的SQL生锈了 - 我有一个简单的要求来计算两个列值中较大者的总和:

CREATE TABLE [dbo].[Test]
(
    column1 int NOT NULL, 
    column2 int NOT NULL
);

insert into Test (column1, column2) values (2,3)
insert into Test (column1, column2) values (6,3)
insert into Test (column1, column2) values (4,6)
insert into Test (column1, column2) values (9,1)
insert into Test (column1, column2) values (5,8)
Run Code Online (Sandbox Code Playgroud)

在SQL Server中没有GREATEST函数的情况下,我可以使用以下方法获取两列中较大的一列:

select column1, column2, (select max(c) 
                            from (select column1 as c
                                   union all
                                  select column2) as cs) Greatest
  from test
Run Code Online (Sandbox Code Playgroud)

而且我希望我可以这样简单地总结它们:

select sum((select max(c) 
              from (select column1 as c
                     union all
                    select column2) as cs))
  from test  
Run Code Online (Sandbox Code Playgroud)

但没有骰子:

Msg 130, Level 15, State 1, Line 7
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
Run Code Online (Sandbox Code Playgroud)

这可能在T-SQL中不使用过程/临时表吗?

更新:伊兰,谢谢 - 我用这种方法.然而,我的最后表达有点复杂,我想知道在这种情况下的表现:

SUM(CASE WHEN ABS(column1 * column2) > ABS(column3 * column4)
         THEN column5 * ABS(column1 * column2) * column6
         ELSE column5 * ABS(column3 * column4) * column6 END)
Run Code Online (Sandbox Code Playgroud)

Era*_*rin 11

试试这个:

 SELECT SUM(CASE WHEN column1 > column2 
                 THEN column1 
                 ELSE column2 END) 
 FROM test
Run Code Online (Sandbox Code Playgroud)