带有if的SQL

时间:2018-07-20 14:08:26

标签: sql

我正在努力编写一个sql查询,其中的情况如下- 我有两条记录用于同一策略(例如“ abc”),并且根据条件我只需要返回一条记录:

                Id policy status 
                33 abc    active 
                15 abc    active

如果ID为15的记录存在并且处于策略“ abc”的活动状态,则仅应返回此记录。但是,如果记录15不存在或处于非活动状态,则应返回另一个活动记录。

4 个答案:

答案 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)。