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

jom*_*k1e 2 sql t-sql sql-server

我的存储过程存在问题.

我收到错误:

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

这是我的存储过程的一部分,我相信错误发生:

SELECT column_1, column_2,
       SUM(CASE WHEN column_2 NOT IN (SELECT product FROM table_products) THEN 1
                ELSE 0
           END) AS Total
FROM my_table 
WHERE is_rated = '1'
GROUP BY column_1, column_2 
Run Code Online (Sandbox Code Playgroud)

谢谢.

Tom*_*m H 6

如果您尝试避免相关子查询,通常会获得更好的性能:

SELECT
    MT.column_1,
    MT.column_2,
    SUM(CASE WHEN P.product IS NULL THEN 1 ELSE 0 END) AS total
FROM
    My_Table MT
LEFT OUTER JOIN Products P ON P.product = MT.column_2
WHERE
    MT.is_rated = '1'
GROUP BY
    MT.column_1,
    MT.column_2
Run Code Online (Sandbox Code Playgroud)

这假设Products表中最多只有一个匹配项(产品,而不是Table_Products - 当然它是一个表,所以不要把它放在名称中).换句话说,如果product是Products表的PK(或AK),这将起作用.

如果不是这种情况,你可能有多个匹配的Products表,那么你可以JOIN到使用子查询DISTINCTproduct列.