Выберите Подмножество из таблицы SQL с запросом - PullRequest
0 голосов
/ 09 июня 2019

У меня есть набор данных, в котором пользователи имеют сервисы (ПК, ноутбук) и идентификаторы входа в систему. Мне нужно выбрать только те идентификаторы входа в систему, которые имеют обе услуги независимо от класса обслуживания.

Я пытался использовать row_number () с разделом на loginID, но он не работает. здесь я хочу выбрать только 10014 и 10016, и еще больше.

Я попробовал следующее:

select * from ( select *, ROW_NUMBER() Over(Partition by LoginID Order by LoginID) RowNumber from data a) as x where x.RowNumber > 1

Но это дает мне только второй ряд.

enter image description here

Ответы [ 3 ]

2 голосов
/ 09 июня 2019

Вы можете использовать cte с count(distinct serviceCode) = 2 (пользователи обеих служб), чтобы найти LoginID и затем join в основной таблице.

with cte as (
select
    LoginID
from data 
group by LoginID
having count(distinct ServiceCode) = 2
)
select
    *
from data d
join cte c
    on d.LoginID = c.LoginID
0 голосов
/ 09 июня 2019

Если вам нужны только идентификаторы входа в систему, используйте агрегирование:

select loginid
from data
where servicecode in (10, 11)
having count(distinct servicecode) = 2;

Если вам нужны исходные строки, один из методов будет exists:

select d.*
from data d
where d.servicecode in (10, 11) and
      exists (select 1
              from data d2
              where d2.servicecode in (10, 11) and
                    d2.loginid = d.loginid
             );

То есть получитьвсе строки с сервисным кодом 10/11 для входа в систему при наличии другого значения.

0 голосов
/ 09 июня 2019

Если 'PC' и 'Laptop' являются единственно возможными значениями, то вам нужно только подсчитать различные значения ServiceCode для каждого LoginID:

SELECT LoginID
FROM data 
GROUP BY LoginID
HAVING COUNT(DISTINCT ServiceCode) = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...