2017-01-06 6 views
0

У меня есть следующий запрос:Oracle SQL: GROUP BY HAVING многокритериальному

SELECT PERSON_ID 
FROM TABLE 
WHERE YEAR > 2013 
AND ACTION = 'TERM' 
GROUP BY PERSON_ID 
HAVING COUNT(ACTION) = 1 

Этот запрос возвращает PERSON_IDs одним TERM действием среди других действий.

Как я могу изменить мое предложение HAVING, чтобы вернуть запрос PERSON_IDs с одним действием TERM и никаких других действий? Я попытался переместить AND ACTION = 'TERM' ниже линии HAVING, но, поскольку в этой строке нет операции GROUP BY, я получаю сообщение об ошибке.

+0

Пожалуйста показать [mcve] – OldProgrammer

+0

Может 'ACTION' быть' null'? И если да, то какой желаемый результат из запроса - если у человека есть ровно две строки, одна с 'ACTION = 'TERM'', а другая с' ACTION =' ''(' null'), если это лицо выбран или нет? – mathguy

ответ

1

Вот один метод:

SELECT PERSON_ID 
FROM TABLE 
WHERE YEAR > 2013 
GROUP BY PERSON_ID 
HAVING COUNT(ACTION) = 1 AND MIN(ACTION) = 'TERM' 
+0

Гордон = гений. Спасибо. – glennsnoise