SQL Server Sql查询基于列获取非重复行

qq24tv8q  于 2023-01-12  发布在  其他
关注(0)|答案(2)|浏览(126)

我有一个表,其中包含一个名为Ref的列和另一个名为status的列。当status ='On'时,我需要获取所有行,然后当status=OFF时,我应该获取所有记录,并且在获取“On”状态时,不从开始获取Ref。
下面是

的示例

xytpbqjk

xytpbqjk1#

这里有一个方法

drop table if exists #have;

create table #have
(
  Ref      [int]
, Status   [Varchar](8)
, Link     [Varchar](8)
)
;

insert into #have
values
  (66, 'OFF'    , 'A')
, (76, 'OFF'    , 'B')
, (12, 'OFF'    , 'C')
, (15, 'OFF'    , 'D')
, (12, 'ON'     , 'E')
, (15, 'ON'     , 'F')
, (25, 'ON'     , 'G')
, (27, 'ON'     , 'H')
, (25, 'Waiting', 'K')
;

select *
from #have
where Status = 'ON'
union
select * 
from #have
where status = 'OFF'
and REF not in (select REF from #have where Status = 'ON')
;
qlfbtfca

qlfbtfca2#

将状态更改为可排序值,如整数。

SELECT *
FROM example_table;
ref|link|status|
---+----+------+
 12|E   |ON    |
 15|F   |ON    |
 25|G   |ON    |
 27|H   |ON    |
 66|A   |OFF   |
 76|B   |OFF   |

将"开"Map到1,将"关"Map到0,将"等待"Map到-1
一个二个一个一个
此查询只读取表一次。
而且只排序一次。
下面是执行计划(Postgresql格式)

相关问题