2015-03-22 2 views
0

Застрял над тем, как преодолеть страшное сообщение, которое поставляется с кодом ниже Каков правильный способ сделать это. Я не хочу использовать заявление INНевозможно выполнить функцию aggreagate в выражении

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

Что вы пытаетесь сделать? Добавьте примерные данные и ожидаемый результат. –

+1

исправьте свой запрос, он пропустил ключевое слово «от», также попробуйте указать конкретный запрос – jfun

+1

, это, похоже, неверно. Три - это не предложение From во внешнем запросе. Откуда стоит значение 'field1'? –

ответ

0

Многие (большинство? Все?) Базы данных не позволяют подзапросы в выражениях агрегации. Раствор, как правило, для перемещения агрегации внутри подзапрос:

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

Следует отметить, что эта конструкция не может быть точно такой же, в том случае, если множество значений соответствует одной строки. В этом случае вам понадобится count(distinct).

0

в качестве запроса и вопроса не было так ясно, так что я не уверен, но я думаю, если вы сравниваете значение из your_table с уу таблицей затем использовать 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 
Смежные вопросы