我有一个表,其中包含一个名为Ref的列和另一个名为status的列。当status ='On'时,我需要获取所有行,然后当status=OFF时,我应该获取所有记录,并且在获取“On”状态时,不从开始获取Ref。下面是的示例
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') ;
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格式)
2条答案
按热度按时间xytpbqjk1#
这里有一个方法
qlfbtfca2#
将状态更改为可排序值,如整数。
将"开"Map到1,将"关"Map到0,将"等待"Map到-1
一个二个一个一个
此查询只读取表一次。
而且只排序一次。
下面是执行计划(Postgresql格式)