我有一个名为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
值为'admin'和'mrr',我想使用SQL只保留Name
的'mrr'值所以我的结果输出如下所示:
Name Type Amount
allen admin 300
brandon mrr 25
jared admin 225
john mrr 30
tyler admin 245
我在SQL Server工作。提前谢谢。
答案 0 :(得分:1)
一种方法是选择所有mrrs,然后只选择不匹配的管理员:
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()
只是按顺序放置值的简便方法。您也可以使用case
表达式,但输入的时间要长得多。