基于特定字段删除重复项的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()
只是将值按顺序排列的方便快捷方式。您也可以使用大小写
表达式,但键入的时间要长得多