假设2行中存在活动和非活动状态
select * from table name where status in (Active,Inactive);
如果活跃状态是需要考虑作为第一优先级,否则需要获得非活动状态
任何人都可以建议一些解决方案
SCH_NAME, STATE, VER
1 pk计划2
2 pk Active 1
答案 0 :(得分:0)
不确定优先的含义,但我认为您打算使用CASE
条件
WHERE Status = CASE
WHEN Status = 'Active'
THEN 'Active'
ELSE NULL
END
答案 1 :(得分:0)
我认为(sch_name,ver)是主键。
这是我的解决方案:
它的工作原因是:
如果sch_name没有" Active"在行中,最小状态ID将是分配给"被动"的那个,所以只有"被动"将返回行
create table user3231655
(
schname varchar2(20),
st varchar2(20),
vr integer
);
delete user3231655;
insert into user3231655 values ('pk','Active',1);
insert into user3231655 values ('pk','Planned',2);
insert into user3231655 values ('fk','Planned',2);
select * from (
select a.*, min(case st when 'Active' then 1 when 'Planned' then 2 end) ver (partition by schname) as min1,
min(case st when 'Active' then 1 when 'Planned' then 2 end) ver (partition by schname, vr) as min2
from user3231655 a
) b
where min1=min2
肯定有更优雅的方法来解决它。