Только когда все статусы совпадают с возвращаемым результатом - PullRequest
1 голос
/ 30 мая 2019

Я выбираю Q_GRADEBOOK_ID, если для всех состояний против Q_GRADEBOOK_ID 488, чем для возврата 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 ]

2 голосов
/ 30 мая 2019

Вы можете исключить идентификатор с другим статусом:

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 голос
/ 30 мая 2019

Вы можете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...