添加 EXIST 子句时获取聚合函数消息

Get aggregate function message when I add a EXIST clause

我有以下查询工作正常:

Select 
SUM(CASE
    WHEN MethodId NOT IN (1,2) THEN 1
    ELSE 0
   END) Total
 FROM pll_data

接下来,我需要检查同一 MethodId 的数据是否存在于另一个 table 中。我收到以下错误(无法对包含聚合或子查询的表达式执行聚合函数。 ) 当我添加偏好另一个 table:

EXISTS 子句时
  SELECT 
  SUM(CASE
   WHEN 
    EXISTS(Select 1 from pll_dataSys pp WHERE pp.PNum = p.PNum AND pp.MethodID IN (1,2,3)) OR  -- I added this line of code
     MethodId NOT IN (1,2) THEN 1
   ELSE 0
  END) Total
FROM pll_data p

注意:添加 EXISTS 子句时出现以下错误:

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

可能是这样

SELECT 
  SUM(CASE
   WHEN ISNULL(result,0)=1 OR
      MethodId NOT IN (1,2) THEN 1
   ELSE 0
  END) Total
FROM pll_data p 
 OUTER APPLY 
 ( Select TOP 1 1 as result 
     from pll_dataSys pp 
      WHERE pp.PNum = p.PNum AND pp.MethodID 
   IN (1,2,3)) A

您可以使用您指定的条件加入 pp,并在 case-when 中对照 null 检查它。为了防止重复,您可以通过排除每个结果记录的所有其他 pp 行来确保 pp 是唯一的:

  SELECT 
  SUM(CASE
   WHEN 
    NOT (pp.Num IS NULL) THEN 1
    ELSE 0
   ELSE 0
  END) Total
FROM pll_data p
LEFT JOIN pll_dataSys pp
ON (p.PNum = pp.PNum AND pp.MethodID IN (1,2)) OR pp.MethodId NOT IN (1, 2)
LEFT JOIN pll_dataSys pp_not_existent
ON ((p.PNum = pp_not_existent.PNum AND pp_not_existent.MethodID IN (1,2)) OR pp_not_existent.MethodId NOT IN (1, 2)) AND pp.pp_id < pp_not_existent.pp_id
WHERE pp_not_existent.pp_IS NULL