2017-01-06 49 views
0

我有以下查询:的Oracle SQL:GROUP BY有多个标准

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

该查询与其他行动中的一个TERM行动返回PERSON_IDs。

如何修改我的HAVING子句以使查询返回带有TERM动作的PERSON_ID并且不执行其他操作?我尝试将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