Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL如何根据多个条件进行筛选,但对返回的内容进行优先级排序?_Sql_Sql Server_Tsql - Fatal编程技术网

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

谢谢大力水手。这很有效。不知道你可以做条件排序!