Мой 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)
В отсутствие функции GREATEST в SQL Server я могу получить больший из двух столбцов с помощью этого:
select column1, column2, (select max(c)
from (select column1 as c
union all
select column2) as cs) Greatest
from test
И я надеялся, что смогу просто сложить их так:
select sum((select max(c)
from (select column1 as c
union all
select column2) as cs))
from test
Но без игры в кости:
Msg 130, Level 15, State 1, Line 7
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
Возможно ли это в T-SQL без обращения к таблице процедур / темпов?
ОБНОВЛЕНИЕ: Эран, спасибо - я использовал этот подход. Мое окончательное выражение немного более сложное, и мне интересно узнать производительность в этом случае:
SUM(CASE WHEN ABS(column1 * column2) > ABS(column3 * column4)
THEN column5 * ABS(column1 * column2) * column6
ELSE column5 * ABS(column3 * column4) * column6 END)