无法对表达式执行聚合函数

时间:2015-03-22 19:44:58

标签: sql

坚持如何克服下面代码附带的可怕消息 这样做的正确方法是什么。我不想使用IN语句

select field1,
SUM(CASE
   WHEN Value IN(SELECT xx FROM yy Where zz)THEN 1 ELSE 0
    END)field2
 group by field1

2 个答案:

答案 0 :(得分:0)

许多(大多数?所有?)数据库不允许聚合表达式中的子查询。解决方案通常是将聚合移动到子查询中:

SELECT field1,
       (SELECT COUNT(*) FROM yy Where zz AND t.value = xx ) as field2
FROM xx t
GROUP BY field1;

请注意,如果多个值与单个行匹配,则此构造可能不完全相同。在这种情况下,您需要count(distinct)的东西。

答案 1 :(得分:0)

由于查询和问题不是那么清楚,所以我不确定,但我认为如果您将your_table中的值与yy表进行比较,那么请使用表格中的left join来查找问题:

select t.field1,
 sum(
       case when y.xx is null then 0 else 1 end) field2
from your_table t left outer join yy y on t.value=y.xx
group by t.field1