小编典典

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

sql

我的存储过程有问题。

我收到错误消息:

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

这是我认为发生错误的存储过程的一部分:

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

谢谢你。


阅读 279

收藏
2021-03-23

共1个答案

小编典典

如果您无论如何都要避免相关的子查询,通常可以得到更好的性能:

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

假设在Products表中最多只能有一个匹配项(Products,而不是Table_Products-
当然是一个表,因此不要在名称中加上该匹配项)。换句话说,如果product是Products表的PK(或AK),则此方法将起作用。

如果不是这种情况,并且Products表中可能有多个匹配项,则可以JOIN转到DISTINCT在该product列上使用的子查询。

2021-03-23