2017-08-11 54 views
0

我有一个要评估的值列表。下面提供将列与过程的值进行比较

'16-%', '45-%','A1%','125%' 

实施例然后,我有1列,它是一个存储过程的输出和第4列,其获得由混叠左外返回联接

例如:

Max(db_util.Efn_name_wid(tdl_tran.reason_code_id, 
       remit_rmc.remit_code_id, remit_rmc.remit_code_name, 'Reason') 
) AS DEN_REASON 

, Max(RMC_1.remit_code_name) 
     AS REMIT_CD1 

,Max(RMC_2.remit_code_name) 
     AS REMIT_CD2 

,Max(RMC_3.remit_code_name) 
     AS REMIT_CD3 

,Max(RMC_4.remit_code_name) 
     AS REMIT_CD4 

逻辑我我试图建立的是:

如果DEN_REASON like(列表中的任何值)

然后,如果它与列表中的任何值匹配,则对列remit_cd1进行评估,然后继续remit_cd2,remit_cd3,remit_cd4,直到找到与列表中的值不匹配的第一个汇款代码。

最终试图返回一个值。

回答

0

我觉得这个CASE语句可能是你需要的东西:

SELECT CASE 
    WHEN DEN_REASON LIKE (/* your set of values */) 
     AND REMIT_CD1 LIKE (/* your set of values */) 
     AND REMIT_CD2 LIKE (/* your set of values */) 
     AND REMIT_CD3 LIKE (/* your set of values */) 
     AND REMIT_CD4 NOT LIKE (/* your set of values */) 
     THEN REMIT_CD4 
    WHEN DEN_REASON LIKE (/* your set of values */) 
     AND REMIT_CD1 LIKE (/* your set of values */) 
     AND REMIT_CD2 LIKE (/* your set of values */) 
     AND REMIT_CD3 NOT LIKE (/* your set of values */) 
     THEN REMIT_CD3 
    WHEN DEN_REASON LIKE (/* your set of values */) 
     AND REMIT_CD1 LIKE (/* your set of values */) 
     AND REMIT_CD2 NOT LIKE (/* your set of values */) 
     THEN REMIT_CD2 
    WHEN DEN_REASON LIKE (/* your set of values */) 
     AND REMIT_CD1 NOT LIKE (/* your set of values */) 
     THEN REMIT_CD1 
    WHEN DEN_REASON NOT LIKE (/* your set of values */) 
     THEN DEN_REASON 
    END AS YourSingleResult 

FROM --your query 
( SELECT 
    Max(db_util.Efn_name_wid(tdl_tran.reason_code_id, 
     remit_rmc.remit_code_id, remit_rmc.remit_code_name, 'Reason') 
     ) AS DEN_REASON 
    ,Max(RMC_1.remit_code_name) AS REMIT_CD1 
    ,Max(RMC_2.remit_code_name) AS REMIT_CD2 
    ,Max(RMC_3.remit_code_name) AS REMIT_CD3 
    ,Max(RMC_4.remit_code_name) AS REMIT_CD4 
    -- and the rest of your query, that you omitted from your example above 
) 

话又说回来,它可能会,如果你在你的子查询没有你的LIKE evals更短。像这样:

SELECT CASE 
    WHEN MatchesDenReason = 1 
     AND MatchesCD1 = 1 
     AND MatchesCD2 = 1 
     AND MatchesCD3 = 1 
     AND MatchesCD4 = 0 
     THEN REMIT_CD4 
    WHEN MatchesDenReason = 1 
     AND MatchesCD1 = 1 
     AND MatchesCD2 = 1 
     AND MatchesCD3 = 0 
     THEN REMIT_CD3 
    WHEN MatchesDenReason = 1 
     AND MatchesCD1 = 1 
     AND MatchesCD2 = 0 
     THEN REMIT_CD2 
    WHEN MatchesDenReason = 1 
     AND MatchesCD1 = 0 
     THEN REMIT_CD1 
    WHEN MatchesDenReason = 0 
     THEN DEN_REASON 
    END AS YourSingleResult 

FROM --your query 
( SELECT 
    Max(db_util.Efn_name_wid(tdl_tran.reason_code_id, 
     remit_rmc.remit_code_id, remit_rmc.remit_code_name, 'Reason') 
     ) AS DEN_REASON 
    ,CASE WHEN Max(db_util.Efn_name_wid(tdl_tran.reason_code_id, 
     remit_rmc.remit_code_id, remit_rmc.remit_code_name, 'Reason') 
     ) LIKE (/* your list */) 
      THEN 1 ELSE 0 END AS MatchesDenReason 
    ,Max(RMC_1.remit_code_name) AS REMIT_CD1 
    ,CASE WHEN Max(RMC_1.remit_code_name) LIKE (/* your list */) 
      THEN 1 ELSE 0 END AS MatchesCD1 
    ,Max(RMC_2.remit_code_name) AS REMIT_CD2 
    ,CASE WHEN Max(RMC_2.remit_code_name) LIKE (/* your list */) 
      THEN 1 ELSE 0 END AS MatchesCD2 
    ,Max(RMC_3.remit_code_name) AS REMIT_CD3 
    ,CASE WHEN Max(RMC_3.remit_code_name) LIKE (/* your list */) 
      THEN 1 ELSE 0 END AS MatchesCD3 
    ,Max(RMC_4.remit_code_name) AS REMIT_CD4 
    ,CASE WHEN Max(RMC_4.remit_code_name) LIKE (/* your list */) 
      THEN 1 ELSE 0 END AS MatchesCD4 
    -- and the rest of your query, that you omitted from your example above 
) 
相关问题