SQL Запрос на выборку пользователя без связанной службы - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть данные в таблице ниже. Я пытаюсь выбрать всех пользователей «Модема», у которых нет связанной телефонной службы.

UserID   DeviceNumber   DeviceType    DeviceRole
1        A              Telephone     SingleUser
1        A              Modem         MultiUser
1        B              Modem         MultiUser
2        C              Telephone     SingleUser
2        C              Modem         MultiUser
2        D              Modem         MultiUser

select distinct t.* from table t
join table t1 on t1.UserID= v.UserID
and t1.DeviceNumber <> t.DeviceNumber
and t.DeviceType = 'Modem';

Я хочу видеть DeviceNumber B и D в моем выводе. Но приведенный выше запрос не возвращает ожидаемых результатов.

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Хммм. , , Один из методов будет:

select t.*
from t
where t.devicetype = 'Modem' and
      not exists (select 1
                  from t t2
                  where t2.userid = t.userid and t2.devicenumber = t.devicenumber and
                        t2.devicetype = 'Telephone'
                 );
1 голос
/ 27 апреля 2020

Вы можете сделать по count. Вот демо .

select
   UserID,
   DeviceNumber,
   DeviceType,
   DeviceRole
from
(
select
    yt.*,
    count(*) over (partition by DeviceNumber) as cnt
from yourTable yt

) val

where cnt = 1
and DeviceType = 'Modem'

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...