基于特定字段删除重复项的SQL语句

基于特定字段删除重复项的SQL语句,sql,sql-server,duplicates,Sql,Sql Server,Duplicates,我有一个名为people的表,它如下所示: Name Type Amount allen admin 300 brandon admin 150 brandon mrr 25 jared admin 225 john mrr 30 john admin 500 tyler admin 245 Name Type Amount allen admin 300 brandon mrr 25 jare

我有一个名为
people
的表,它如下所示:

Name    Type    Amount
allen   admin   300
brandon admin   150
brandon mrr     25
jared   admin   225
john    mrr     30
john    admin   500
tyler   admin   245
Name    Type    Amount
allen   admin   300
brandon mrr     25
jared   admin   225
john    mrr     30
tyler   admin   245
如果有一个
Name
值同时具有
Type
值'admin'和'mrr',我想使用SQL只保留该
Name
的'mrr'值,这样我的结果输出如下所示:

Name    Type    Amount
allen   admin   300
brandon admin   150
brandon mrr     25
jared   admin   225
john    mrr     30
john    admin   500
tyler   admin   245
Name    Type    Amount
allen   admin   300
brandon mrr     25
jared   admin   225
john    mrr     30
tyler   admin   245

我在SQL Server工作。提前感谢。

一种方法是选择所有MRR,然后只选择不匹配的管理员:

select p.*
from people p
where p.type = 'mrr'
union all
select p.*
from people p
where p.type = 'admin' and
      not exists (select 1 from people p2 where p2.name = p.name and p2.type = 'mrr');
上述方法通常是合理有效的。但也可以使用窗口功能:

select p.*
from (select p.*,
             row_number() over (partition by p.name order by charindex(p.type, 'mrr,admin')
                               ) as seqnum
      from people p
     ) p
where seqnum = 1;
charindex()
只是将值按顺序排列的方便快捷方式。您也可以使用
大小写
表达式,但键入的时间要长得多