如何为sum-function
中的选择语句创建解决方法我目前正在将我的Sybase数据库迁移到MSSQL。我的一个观点之一在其主要选择语句中有一些总和,然后在我的总和函数中使用子选择
SELECT
SUM(CASE WHEN e.s = 'E'
AND EXISTS
( SELECT
1
FROM
system.E
JOIN system.EF
ON EF.EID = E.ID
WHERE
E.CID = C.ID
AND EF.T='smth')
AND A.AC= 'smthelse'
AND ET.EC not in( 'lol','lul','lel')
THEN
B.A
ELSE
0.0
END) AS smth
FROM ...
我希望当选择语句至少有1个结果
时,它将概括为B.A但是我收到此错误消息:
无法在包含聚合或子查询的表达式上执行聚合函数。
我认为它不允许我在总和功能中使用子选择,但我不确定如何修复它。
您可以使用OUTER APPLY
操作员用横向JOIN
替换子查询:
SELECT . . .
SUM(CASE WHEN e.s = 'E' AND
eef.ID IS NOT NULL AND
A.AC = 'smthelse' AND
ET.EC NOT IN ( 'lol', 'lul', 'lel')
THEN B.A ELSE 0.0
END) AS smth
FROM ... OUTER APPLY
(SELECT TOP (1) E.*
FROM system.E JOIN
system.EF
ON EF.EID = E.ID
WHERE E.CID = C.ID AND EF.T = 'smth'
) EEF