SQL选择主要策略(如果存在或)

时间:2014-05-22 00:44:23

标签: sql select

我想使用CASE编写SQL查询来报告策略所有者和策略的详细信息。目标是报告' HOME'的政策类型。如果策略所有者具有该类型的策略,或者如果他们没有归属策略则报告下一个可用策略。例如,Sally Powel没有HOME策略类型,因此我应该报告车辆。对于Van Bommel,我们应该报告HOME政策类型,因为他有一个ACTIVE类型的政策。格兰特霍尔特既没有家也没有车辆,所以我应该报告洪水。

POLICY  DETAILS
DETAIL_ID POLICY_ID   POLICY_TYPE       DATE_OF_ISSUE       POLICY_STATUS    
2000           1          HOME         05/09/2010          CANCELLED     
2001           2          VEHICLE      02/03/2012          ACTIVE  
2003           3          FLOOD        01/12/2000          ACTIVE
2004           3          HOME         01/12/2009          CANCELLED
2005           2          HOME         03/04/2009          ACTIVE
2006           1          FLOOD        05/09/2010          ACTIVE

POLICY_ID   POLICY_OWNER 
1            GRANT HOLT   
2            SALLY POWELL
3            VAN BOMMEL

1 个答案:

答案 0 :(得分:1)

您可以使用复杂的case逻辑执行此操作。第一个case位于min()内,为策略类型分配优先级。第二个是取消它并得到他们的名字。

select pd.policy_owner,
       (case min(case policy_type when 'HOME' then 1 when 'VEHICLE' then 2 else 3 end)
             when 1 then 'HOME'
             when 2 then 'VEHICLE'
             when 3 then 'FLOOD'
        end)
from owners o join
     policydetails pd
     on o.policy_id = pd.policy_id
group by pd.policy_owner;