当时的情况无法对包含聚集或子查询的表达式执行聚集功能

时间:2018-10-04 19:43:02

标签: sql

这是我的代码:

SELECT SUM 
        (CASE
            WHEN (dbo.EMBARQUE.EmbEst) = 0 THEN

                0
            WHEN (dbo.EMBARQUE.EmbEst) = 3 THEN 
                0
            WHEN (dbo.EMBARQUE.EmbEst) = 6 THEN 
                0       
            WHEN (dbo.EMBARQUE.EmbEst) = 7 THEN 
                CASE
                    WHEN (SELECT COUNT (dbo.CUMPLIDO.CumpCod) from dbo.CUMPLIDO where dbo.CUMPLIDO.EmbCod = dbo.EMBARQUE.EmbCod and dbo.CUMPLIDO.CumpVol = 0) > 0 THEN 
                        0
                    ELSE  
                        dbo.EMBARQUE.EmbVol
                END
            ELSE
                dbo.EMBARQUE.EmbVol
        END) FROM dbo.EMBARQUE

1 个答案:

答案 0 :(得分:-1)

您在sum()中有一个子查询。那是不允许的。此版本使用子查询来计算所需的标志,然后将过滤逻辑移至WHERE子句:

SELECT SUM(e.EmbVol)
FROM (SELECT e.*,
             (CASE WHEN EXISTS (SELECT 1 FROM dbo.CUMPLIDO c WHERE c.EmbCod = e.EmbCod AND c.CumpVol = 0)
                   THEN 1 ELSE 0
              END) as is_CumpVol_0
      FROM dbo.EMBARQUE e
      WHERE e.EmbEst NOT IN (0, 3, 6)
     ) e
WHERE e.EmbEst <> 7 OR is_CumpVol_0 = 0;