SQL Регистрация на одном столе - PullRequest
0 голосов
/ 14 февраля 2020
Table T
P_ID | Name | Status
1      ABC    Ordered
1      ABC    Processing
1      ABC    Imported
2      PQR    Ordered
2      PQR    Failed
3      LMN    Ordered

Ожидаемый результат

Table T
P_ID | Name | Status
2      PQR    Ordered
2      PQR    Failed 
3      LMN    Ordered

Я не получаю правильный результат со следующим запросом. Я хочу найти все записи, которые имеют статус "Заказано", но не имеют статуса "Импортировано".

select c1.P_ID,c1.Name,c2.Status
from T c1, T c2
where c1.P_ID = c2.P_ID
c1.Status="Ordered" and c2.status != "Imported"

Использование базы данных Oracle 11g

Ответы [ 2 ]

3 голосов
/ 14 февраля 2020
select c1.P_ID, c1.Name, c1.Status
from T c1
where c1.Status = 'Ordered' and 
      NOT EXISTS (SELECT 1
                  FROM T c2
                  WHERE c1.P_ID = c2.P_ID and c2.status = 'Imported'
                 );
2 голосов
/ 14 февраля 2020

Вы можете использовать следующий код:

select c1.P_ID,c1.Name,c1.Status
  from T c1
 where exists (select 1
                 from T
                where P_ID = c1.P_ID
                  and Status="Ordered"
                  and rownum = 1)
   and not exists (select 1
                     from T
                    where P_ID = c1.P_ID
                      and Status="Imported"
                      and rownum = 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...