SQL использование group by для выбора групп, в которых все записи в группе имеют определенное значение - PullRequest
2 голосов
/ 01 мая 2020

Вот некоторые примеры данных. Я пытаюсь сгруппировать по OrderID и lineID, а затем пытаюсь вернуть только уникальный orderID и lineID из групп, которые имеют «YES» для ВСЕХ записей. Первичный ключ представляет собой комбинацию OrderID lineID и positionID

  OrderID        lineID  positionID   fieldOfInterest    somefield1   somefield2 ....
    1A2          10248       1          'YES'               -           -
    1A2          10248       2          'YES'               -           -
    1A2          10248       3          'YES'               -           -
    1A2          10249       2          'YES'               -           -
    1C3          11200       5          'YES'               -           -
    1C3          10250       1          'NO'                -           -
    1V8          10250       7          'YES'               -           -
    1V8          10250       8          'NO'                -           -
    .             .          .           .                  .           .
    .             .          .           .                  .           .
    .             .          .           .                  .           .

Результат, который я ищу, будет

  OrderID        lineID  
    1A2          10248       <------ all records (3) had 'YES'
    1A2          10249       <------ all records (1) had 'YES'
    1C3          11200       <------ all records (1) had 'YES'

. Любые идеи будут оценены.

1 Ответ

3 голосов
/ 01 мая 2020

Использовать агрегирование:

select OrderID, lineID
from t
group by OrderID, lineID
having min(fieldOfInterest) = max(fieldOfInterest) and min(fieldOfInterest) = 'YES';

На самом деле, если значения только "ДА" и "НЕТ", вы можете сделать:

having min(fieldOfInterest) = 'YES'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...