答案 0 :(得分:2)
一种选择是枢轴方法,如下所示:
SELECT
MAX(CASE WHEN Row = 2 THEN S1 END) +
MAX(CASE WHEN Row = 3 THEN S2 END) +
MAX(CASE WHEN Row = 1 THEN S3 END) AS the_sum
FROM yourTable;
如果您实际上没有Row
列,那么我们可以轻松地在CTE中使用其他列之一来生成一个以提供排序,例如
WITH cte AS (
SELECT *,
ROW_NUMBER() OVER (ORDER BY S1) Row
FROM yourTable
)
然后,使用我上面给出的第一个查询,但以cte
作为表,而不是yourTable
。
这是SQL Server中的一个演示,至少演示了基本的逻辑原理:
答案 1 :(得分:0)
我会这样写:
select sum(case when row = 1 then s3
when row = 2 then s1
when row = 3 then s2
end)
from t;
我认为您可以比没有group by
的聚合更优化。