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

谢谢你。

原文由 jomsk1e 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.2k
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 - 当然它是一个表,所以不要把它放在名称中)。换句话说,如果产品是 Products 表的 PK(或 AK),这将起作用。

If that’s not the case and you might have multiple matches in the Products table then you can JOIN to a subquery that uses DISTINCT on the product 专栏。

原文由 Tom H 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进