我有一个数据集,用户可以在其中获取登录ID的服务(PC,笔记本电脑)。我只需选择具有两种服务的登录ID,而与服务类别无关。
我试图对登录ID的分区使用row_number(),但是它不起作用。 在这里,我只想选择10014和10016,还有更多。
我尝试了以下方法:
select * from ( select *, ROW_NUMBER() Over(Partition by LoginID Order by LoginID) RowNumber from data a) as x where x.RowNumber > 1
但是它只给我第二行。
答案 0 :(得分:2)
您可以将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
答案 1 :(得分:0)
如果'Laptop'
和ServiceCode
是唯一可能的值,那么您只需要为每个LoginID
计算SELECT LoginID
FROM data
GROUP BY LoginID
HAVING COUNT(DISTINCT ServiceCode) = 2
的不同值:
[start:stop:step]
答案 2 :(得分:0)
如果只需要登录ID,请使用聚合:
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服务代码的行用于登录。