我的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)
在SQL Server中没有GREATEST功能的情况下,我可以使用以下内容获得两列中较大的一行:
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)
答案 0 :(得分:11)
试试这个:
SELECT SUM(CASE WHEN column1 > column2
THEN column1
ELSE column2 END)
FROM test
答案 1 :(得分:1)
试试这个......它不是性能最佳的选择,但应该有效。
SELECT
'LargerValue' = CASE
WHEN SUM(c1) >= SUM(c2) THEN SUM(c1)
ELSE SUM(c2)
END
FROM Test
答案 2 :(得分:1)
SELECT
SUM(MaximumValue)
FROM (
SELECT
CASE WHEN column1 > column2
THEN
column1
ELSE
column2
END AS MaximumValue
FROM
Test
) A
答案 3 :(得分:0)
仅供参考,更复杂的情况应该没问题,只要所有这些列都是同一个表的一部分。它仍然查找相同数量的行,因此性能应该与更简单的情况非常相似(因为SQL Server性能通常是IO绑定的)。
答案 4 :(得分:0)
如何从单行数据中找到最大值
-- eg (empid , data1,data2,data3 )
select emplid , max(tmp.a)
from
(select emplid,date1 from table
union
select emplid,date2 from table
union
select emplid,date3 from table
) tmp , table
where tmp.emplid = table.emplid
答案 5 :(得分:0)
select sum(id) from (
select (select max(c)
from (select column1 as c
union all
select column2) as cs) id
from test
)
答案 6 :(得分:0)
最好的答案就是:
;With Greatest_CTE As
(
Select ( Select Max(ValueField) From ( Values (column1), (column2) ) ValueTable(ValueField) ) Greatest
From Test
)
Select Sum(Greatest)
From Greatest_CTE
它比具有两个以上值列的其他答案更好地扩展。