2017-01-06 52 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