添加 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
我有以下查询工作正常:
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