首页 > 解决方案 > 如何在聚合函数 SUM() 中替换 SELECTS

问题描述

如何为 SUM-Function 中的 SELECT 语句创建解决方法

我目前正在将我的 Sybase 数据库迁移到 MsSQL。我的一个观点在其主要选择语句中有一些 SUM,然后在我的 SUM 函数中使用 subSelects

    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 ...

当 Select 语句至少有 1 个结果时,我希望它对 bA 求和

但相反,我收到此错误消息:

无法对包含聚合或子查询的表达式执行聚合函数。

我认为它不允许我在 SUM 函数中使用 subSelect,但我不确定如何修复它。

标签: sqlsql-server

解决方案


JOIN您可以使用运算符将​​子查询替换为横向OUTER APPLY

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

推荐阅读