Sql 根据列的重复值检索行
我想从我的表格卡中检索数据 这样,只应返回具有重复成员身份号(即计数大于1)的行。 就像我有以下记录一样Sql 根据列的重复值检索行,sql,sql-server,count,Sql,Sql Server,Count,我想从我的表格卡中检索数据 这样,只应返回具有重复成员身份号(即计数大于1)的行。 就像我有以下记录一样 (11,0321,'active','John') (11,0322,'active','John') (23,0350,'active','Mary') (46,0383,'active','Fudge') (46,0382,'active','Fudge') (46,0381,'active','Fudge') 查询应返回除第三条记录外的所有记录。可能吗 我得到了问题的答案。我还有一个
(11,0321,'active','John')
(11,0322,'active','John')
(23,0350,'active','Mary')
(46,0383,'active','Fudge')
(46,0382,'active','Fudge')
(46,0381,'active','Fudge')
查询应返回除第三条记录外的所有记录。可能吗
我得到了问题的答案。我还有一个问题。我也想按状态筛选行,但当我运行以下查询时,我没有得到所需的结果:
SELECT EmbossLine,Membershipnumber,status,embossname,*
FROM (SELECT *,
Count(MembershipNumber)OVER(partition BY EmbossName) AS cnt
FROM card) A
WHERE cnt > 1 AND status='E0'
在where子句中添加status之前,它工作得非常好。看图
添加按状态筛选后
应该这样做使用窗口计数功能来完成此操作
SELECT *
FROM (SELECT *,
Count(MembershipNumber)OVER(partition BY EmbossName) AS cnt
FROM youurtable) A
WHERE cnt > 1
演示
或
在empbossname上找到重复项并获得结果
select t1.* from card as t1 inner join
(select empbossname from card group by empbossname having count(*)>1) as t2
on t1.empbossname =t2.empbossname
不,还有一件事;我想按状态进一步筛选记录。我尝试了以下操作,但没有得到想要的结果选择浮雕行、会员编号、状态、浮雕名称、*FROM SELECT*,CountMembershipNumberOVERpartition BY embosseName AS cnt FROM card A,其中cnt>1,status='inactive'在哪里添加status='inactive'以使其合适?@Nuke-您的status列没有E0值。@Nuke-语法正确。当我把状态添加到过滤器时,我也得到了不同的记录,那些没有重复的记录membershipnumber@Nuke-你能添加一些样本数据吗?我有一个大数据,两个人可能同名
SELECT *
FROM (SELECT *,
Count(MembershipNumber)OVER(partition BY EmbossName) AS cnt
FROM youurtable) A
WHERE cnt > 1
SELECT MembershipNumber,
[status],
EmbossName
FROM (SELECT *,
Count(MembershipNumber)OVER(partition BY EmbossName) AS cnt
FROM (VALUES (11.0321,'active','John'),
(11.0322,'active','John'),
(23.0350,'active','Mary'),
(46.0383,'active','Fudge'),
(46.0382,'active','Fudge'),
(46.0381,'active','Fudge')) tc (MembershipNumber, [status], EmbossName)) A
WHERE cnt > 1
Select c.* from card c
join (select MembershipNumber from table group by
MembershipNumber having count(MembershipNumber) > 1) mem
on mem.MembershipNumber = c.MembershipNumber
Select * from table where MembershipNumber in
(select MembershipNumber from table group by
MembershipNumber having count(MembershipNumber) > 1)
select t1.* from card as t1 inner join
(select empbossname from card group by empbossname having count(*)>1) as t2
on t1.empbossname =t2.empbossname