如何在聚合函数总和中替换选择



如何为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

最新更新