T-SQL如何根据多个条件进行筛选,但对返回的内容进行优先级排序?
我有下面的数据T-SQL如何根据多个条件进行筛选,但对返回的内容进行优先级排序?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有下面的数据 create table #results ( id int , result_attr char(1) , result varchar(100) ) insert into #results (id, result_attr, result) values (1, 'E', '***ERROR') , (2, 'E', '***CORRECTED') , (3, 'E', '***RESULTED') ,
create table #results (
id int
, result_attr char(1)
, result varchar(100)
)
insert into
#results (id, result_attr, result)
values
(1, 'E', '***ERROR')
, (2, 'E', '***CORRECTED')
, (3, 'E', '***RESULTED')
, (4, 'E', '***AMENDED')
, (4, 'E', 'FOO')
, (5, 'E', 'ERROR***')
, (5, 'E', 'CORPOREAL')
, (6, 'E', '***CORRECTED')
, (7, 'E', '***RESULTED')
, (7, 'E', 'ABUNDANT')
, (7, 'E', 'PLENTITUDE')
, (8, 'E', 'INCORRECT')
, (9, 'A', 'HIGH')
, (10, 'A', 'LOW')
select *
from #results
drop table #results
完整的结果集是:
我期望的结果集是:
这不太管用:
select
res.id
, res.result_attr
, res.result
from #results as res
where
(charindex('***', res.result) > 0 or res.result_attr = 'E')
棘手的是,我想排除结果为“FOO”的ID#4,以及结果为“肉体”的ID#5和结果为“丰富”和“充分”的ID#7,但我想保留结果为“不正确”的ID#8。总而言之,我想排除以下内容:
我试过一些窗口功能和其他东西,但我有点被这个卡住了。我将感谢任何帮助 使用:
select
res.id
, res.result_attr
, res.result
from results as res
where res.result LIKE '%***%' OR res.result = 'INCORRECT';
您可以使用具有条件排序的
行数分析函数,如下所示:
Select * from
(select
res.id
, res.result_attr
, res.result
, row_number() over (partition by res.id
order by case when charindex('***', res.result) > 0
then 1 else 2 end) as rn
from #results as res
where
(charindex('***', res.result) > 0 or res.result_attr = 'E') t
Where rn = 1
Order by id
谢谢大力水手。这很有效。不知道你可以做条件排序!