仅当所有状态都与返回结果相同时

时间:2019-05-30 06:22:31

标签: oracle

如果针对所有状态 Q_GRADEBOOK_ID的值为488,而不是返回Q_GRADEBOOK_ID,否则我选择Q_GRADEBOOK_ID,否则返回空

TABLE Q_GB_CAT_SCORE
---------------------------------------------------------
 Q_GRADEBOOK_ID | PERSON_ID | STATUS | Q_GRADEBOOK_CAT_ID
      1         |     1     |  488   |       1
      1         |     1     |  488   |       2
      1         |     2     |  488   |       1
      2         |     2     |  486   |       1
      2         |     2     |  488   |       2

我的查询

 SELECT
 DISTINCT 
 Q_GRADEBOOK_ID 
 FROM 
 Q_GB_CAT_SCORE WHERE
 STATUS IN ('488')

此查询返回此结果

Q_GRADEBOOK_ID
      1        
      2    

预期结果

Q_GRADEBOOK_ID
      1        

我之所以如此,是因为Q_GRADEBOOK_ID 1返回是因为针对Q_GRADEBOOK_ID 1的所有状态均为488。

2 个答案:

答案 0 :(得分:2)

您可以排除状态不同的ID:

SELECT distinct 
 Q_GRADEBOOK_ID
  FROM Q_GB_CAT_SCORE
 WHERE Q_GRADEBOOK_ID not in
        (select distinct Q_GRADEBOOK_ID FROM Q_GB_CAT_SCORE WHERE status <> '488')

答案 1 :(得分:1)

您可以GROUP BY Q_GRADEBOOK_ID并将条件放在HAVING子句中:

SELECT Q_GRADEBOOK_ID 
FROM Q_GB_CAT_SCORE 
GROUP BY Q_GRADEBOOK_ID
HAVING COUNT(*) = SUM(CASE WHEN STATUS = '488' THEN 1 ELSE 0 END)

SELECT Q_GRADEBOOK_ID 
FROM Q_GB_CAT_SCORE 
GROUP BY Q_GRADEBOOK_ID
HAVING SUM(CASE WHEN STATUS <> '488' THEN 1 ELSE 0 END) = 0