带if-else的SQL

带if-else的SQL,sql,Sql,我正在努力编写一个sql查询,其场景如下- 我有两份相同保单的记录,比如abc,我必须根据条件只返回一份: Id policy status 33 abc active 15 abc active 如果id为15的记录存在并且处于策略abc的活动状态,则只应返回此记录。但是,如果记录15不存在或处于非活动状态,则应返回另一个活动记录。如果您使用的是Oracle,则应在自联接的wher

我正在努力编写一个sql查询,其场景如下- 我有两份相同保单的记录,比如abc,我必须根据条件只返回一份:

                Id policy status 
                33 abc    active 
                15 abc    active

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

如果您使用的是Oracle,则应在自联接的where子句中使用exists语句来验证该策略的ID 15是否存在 id int, 政策varchar10, 状态varchar10 ; 这应该起作用:

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'
);

前面的解决方案不考虑策略,请尝试此解决方案

如果存在,从tbl中选择*,其中ID=15,策略='abc'和状态='active' 从tbl中选择*,其中ID=15,策略='abc'和状态='active' 其他的
选择*from tbl,其中ID 15

您要显示15个激活的,否则如果15不存在,则显示33个激活的。推断您只关心特定保单“abc”的“活动”状态

事实证明,您可以对ID使用最小聚合

SELECT MIN(ID) AS ID, policy, status
  FROM yourtablename
 WHERE status = 'active'
 GROUP BY policy, status

返回策略活动状态的MINID。

您使用的是什么?显示您为解决此问题而编写的代码。您好,我尝试的是switch case语句,但根本不起作用。我使用的是MicrosoftSql 2014。不过,下面给出的解决方案非常有效,谢谢。我也尝试了以下方法-如果存在,请选择branchid从策略中选择branchid,其中policyNumbr='123'且id='15'和AccountStatus='Active'开始从策略中选择branchid,其中policyNumbr='123'且id='15'和AccountStatus='Active'结束,否则请从中选择branchid策略,其中policyNumbr='123'和AccountStatus='Active'结束