嵌套 Case When 语句

问题描述 投票:0回答:1

是否有更有效的方法来编写这种 case when 语句,以免有那么多“when c.clm_its.host.cd IN...”。我认为可以在主案例中添加嵌套案例。这是一个可行的选择吗?

  , CASE
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND c.clm_sor_cd <> '808'  THEN ''
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('040','540','041','044','046') THEN 'CA'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('051','551','050','550','052') THEN 'CO'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('266','766','265','765','267') THEN 'NV'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('131','631','132','130','630') THEN 'IN'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('161','661','162','160','660') THEN 'KY'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('748','749','241','741','248') THEN 'MO'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('330','830','329','332','834') THEN 'OH'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('458','454','954','450','950') THEN 'WI'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('425','925','427','429') THEN 'VA'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('254','246','746','308') THEN 'NY'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('102','602','101','601','103') AND ca.prcsg_unit_id IN ('8Y') THEN 'GA'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('062','562','063','563','064') AND ca.prcsg_unit_id IN ('7W','8M') THEN 'CT'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('182','682','183','685','185') AND ca.prcsg_unit_id IN ('7Y') THEN 'ME'
  WHEN c.clm_its_host_cd IN ('HOST','JAACL') AND Substr(c.clm_its_sccf_nbr,1,3) IN ('271','771','272','769','269') AND ca.prcsg_unit_id IN ('8D') THEN 'NH'

  WHEN cl.clm_sor_cd = '808' AND clp.prov_st_cd IN ('CA', 'CO', 'NV', 'IN', 'KY', 'OH', 'MO', 'WI', 'NH', 'ME', 'CT', 'NY', 'VA', 'GA') THEN clp.prov_st_cd 
  WHEN cl.clm_sor_cd = '808' AND Left(cl.pn_id,4) = 'SPEC' THEN 'GA' 
  WHEN cl.clm_sor_cd = '808' AND Left(cl.pn_id,4) = 'HOSP' THEN 'GA' 
  WHEN cl.clm_sor_cd = '808' AND Left(cl.pn_id,2) IN ('CT','ME','NY','VA','NH','MO','OH','KY','WI') THEN Left(cl.pn_id,2)
  WHEN cl.clm_sor_cd = '808' AND Left(cl.pn_id,2) = 'IY' THEN 'IN'
  WHEN cl.clm_sor_cd = '808' AND mbu.brnd_desc = 'OTHER' AND ccf.cmpny_st_cd NOT IN ('','NA','UNK') THEN ccf.cmpny_st_cd 
  WHEN cl.clm_sor_cd = '808' AND mbu.brnd_desc = 'BCC' THEN 'CA' 
  WHEN cl.clm_sor_cd = '808' AND mbu.brnd_desc = 'CO/NV' THEN 'CO/NV' 
  WHEN cl.clm_sor_cd = '808' AND mbu.brnd_desc = 'UNICARE' THEN 'UNICARE' 
  WHEN cl.clm_sor_cd = '808' AND Substr(mbu.brnd_desc,1, 4)='BCBS' THEN Substr(mbu.brnd_desc,5,2)          
  WHEN cl.clm_sor_cd = '824' AND c.srvcg_plan_cd = '560' THEN 'CT' 
  WHEN cl.clm_sor_cd = '824' AND c.srvcg_plan_cd = '600' THEN 'GA' 
  WHEN cl.clm_sor_cd = '824' AND c.srvcg_plan_cd = '630' THEN 'IN' 
  WHEN cl.clm_sor_cd = '824' AND c.srvcg_plan_cd = '660' THEN 'KY' 
  WHEN cl.clm_sor_cd = '824' AND c.srvcg_plan_cd = '680' THEN 'ME' 
  WHEN cl.clm_sor_cd = '824' AND c.srvcg_plan_cd = '741' THEN 'MO' 
  WHEN cl.clm_sor_cd = '824' AND c.srvcg_plan_cd = '770' THEN 'NH' 
  WHEN cl.clm_sor_cd = '824' AND c.srvcg_plan_cd = '834' THEN 'OH' 
  WHEN cl.clm_sor_cd = '824' AND c.srvcg_plan_cd = '950' THEN 'WI' 
  WHEN cl.clm_sor_cd = '823' AND clp.prov_st_cd IN ('IN','KY','OH', 'MO','WI') THEN clp.prov_st_cd 
  WHEN cl.clm_sor_cd = '823' AND mbu.brnd_desc = 'UNICARE' THEN 'UNICARE' 
  WHEN cl.clm_sor_cd = '823' AND Substr(mbu.brnd_desc,1, 4)='BCBS' THEN Substr(mbu.brnd_desc,5,2) 
  WHEN cl.clm_sor_cd = '809' THEN 'NY'  
  WHEN cl.clm_sor_cd = '869' THEN 'VA'  
  WHEN cl.clm_sor_cd = '896' AND mbu.brnd_desc = 'BCC' THEN 'CA' 
  WHEN cl.clm_sor_cd = '896' AND Substr(mbu.brnd_desc,1, 4)='BCBS' THEN Substr(mbu.brnd_desc,5,2) 
  WHEN cl.clm_sor_cd = '1104' AND clp.prov_st_cd IS NOT NULL THEN clp.prov_st_cd 
  WHEN cl.clm_sor_cd = '1104' AND mbu.brnd_desc = 'BCC' THEN 'CA' 
  WHEN cl.clm_sor_cd = '1104' AND Substr(mbu.brnd_desc,1, 4)='BCBS' THEN Substr(mbu.brnd_desc,5,2) 
  WHEN cl.clm_sor_cd = '1104' AND mbu.brnd_desc = 'Blue LA' THEN 'LA' 
  WHEN cl.clm_sor_cd = '1104' AND Substr(mbu.mbu_cf_cd,1,2) = 'AG' THEN Substr(mbu.mbu_cf_cd,3,2) 
  ELSE 'OTH' END AS SERV_PROV_STATE
sql case teradata-sql-assistant
1个回答
0
投票

参见示例

CASE WHEN c.clm_its_host_cd IN ('HOST','JAACL') then
     WHEN c.clm_sor_cd <> '808'  THEN ''
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('040','540','041','044','046') THEN 'CA'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('051','551','050','550','052') THEN 'CO'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('266','766','265','765','267') THEN 'NV'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('131','631','132','130','630') THEN 'IN'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('161','661','162','160','660') THEN 'KY'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('748','749','241','741','248') THEN 'MO'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('330','830','329','332','834') THEN 'OH'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('458','454','954','450','950') THEN 'WI'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('425','925','427','429') THEN 'VA'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('254','246','746','308') THEN 'NY'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('102','602','101','601','103') 
      AND ca.prcsg_unit_id IN ('8Y') THEN 'GA'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('062','562','063','563','064') 
      AND ca.prcsg_unit_id IN ('7W','8M') THEN 'CT'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('182','682','183','685','185') 
      AND ca.prcsg_unit_id IN ('7Y') THEN 'ME'
     WHEN Substr(c.clm_its_sccf_nbr,1,3) IN ('271','771','272','769','269') 
      AND ca.prcsg_unit_id IN ('8D') THEN 'NH'
     ELSE 'OTH' END
  WHEN cl.clm_sor_cd = '808' THEN 
     WHEN clp.prov_st_cd IN ('CA', 'CO', 'NV', 'IN', 'KY', 'OH', 'MO', 'WI', 'NH', 'ME', 'CT', 'NY', 'VA', 'GA') THEN clp.prov_st_cd 
     WHEN Left(cl.pn_id,4) = 'SPEC' THEN 'GA' 
     WHEN Left(cl.pn_id,4) = 'HOSP' THEN 'GA' 
     WHEN Left(cl.pn_id,2) IN ('CT','ME','NY','VA','NH','MO','OH','KY','WI') THEN Left(cl.pn_id,2)
     WHEN Left(cl.pn_id,2) = 'IY' THEN 'IN'
     WHEN mbu.brnd_desc = 'OTHER' AND ccf.cmpny_st_cd NOT IN ('','NA','UNK') THEN ccf.cmpny_st_cd 
     WHEN mbu.brnd_desc = 'BCC' THEN 'CA' 
     WHEN mbu.brnd_desc = 'CO/NV' THEN 'CO/NV' 
     WHEN mbu.brnd_desc = 'UNICARE' THEN 'UNICARE' 
     WHEN Substr(mbu.brnd_desc,1, 4)='BCBS' THEN Substr(mbu.brnd_desc,5,2)          
     ELSE 'OTH' END
 WHEN cl.clm_sor_cd = '808'....
  ... and so on
ELSE 'OTH' END AS SERV_PROV_STATE
© www.soinside.com 2019 - 2024. All rights reserved.