我正在努力编写一个sql查询,其中的情况如下- 我有两条记录用于同一策略(例如“ abc”),并且根据条件我只需要返回一条记录:
Id policy status
33 abc active
15 abc active
如果ID为15的记录存在并且处于策略“ abc”的活动状态,则仅应返回此记录。但是,如果记录15不存在或处于非活动状态,则应返回另一个活动记录。
答案 0 :(得分:0)
如果您使用的是Oracle,则可以在自我联接的where子句中使用“ exists”语句来验证该策略的ID 15是否存在
答案 1 :(得分:0)
创建表my_table( id int, 策略varchar(10), 状态varchar(10) ); 这应该起作用:
insert into my_table (id, policy, status) values (33, 'abc', 'active');
insert into my_table (id, policy, status) values (15, 'abc', 'active');
select * from my_table where id = 15 and status = 'active'
union
select * from my_table where id = 33 and not exists (
select * from my_table where id = 15 and status = 'active'
);
答案 2 :(得分:0)
以前的解决方案不考虑政策,请尝试
如果存在(从tbl中选择*,其中ID = 15,策略=“ abc”,状态=“活动”) 从tbl中选择*,其中ID = 15,策略=“ abc”,状态=“活动” 其他 从tbl中选择*,其中ID <> 15
答案 3 :(得分:0)
您要显示15个活动对象,否则,如果15个不存在,则显示33个活动对象。推断您只关心特定策略“ abc”的“活动”状态。
事实证明,您可以对ID使用MIN汇总。
SELECT MIN(ID) AS ID, policy, status
FROM yourtablename
WHERE status = 'active'
GROUP BY policy, status
返回策略活动状态的MIN(ID)。