Oracle сумма столбцов в зависимости от условий - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь получить сумму PREFIX_RSDL_PRORTDCST, PREFIX_FRNG_RSDL_PRORTDCST, PARTCODE_RSDL_PRORTDSUM, PARTCODE_FRINGE_RSDL_AMT но на основе некоторых условий.

SELECT PP.PP_STATUS_CD
     , PP.PF_STATUS_CD
     , PCP.PCP_STATUS_CD
     , PCP.PCF_PRORTD_STATUS_CD
     , PP.PREFIX_RSDL_PRORTDCST
     , PP.PREFIX_FRNG_RSDL_PRORTDCST
     , PCP.PARTCODE_RSDL_PRORTDSUM
     , PCP.PARTCODE_FRINGE_RSDL_AMT
     , COALESCE(PP.PREFIX_RSDL_PRORTDCST, 0) 
       + COALESCE(PP.PREFIX_FRNG_RSDL_PRORTDCST, 0) 
       + COALESCE(PCP.PARTCODE_RSDL_PRORTDSUM, 0) 
       + COALESCE(PCP.PARTCODE_FRINGE_RSDL_AMT, 0) AS TOTAL_UNBILLED_AMOUNT 
FROM FPM_EIMS_CB_PREFIX_PRORTNS  PP 
INNER JOIN FPM_EIMS_CB_CALCULATIONS EC ON PP.PREFIX_PRORTN_ID = EC.PREFIX_PRORTN_ID INNER JOIN FPM_EIMS_CB_FED_SUM_PRORTNS PCP ON PCP.PARTCODE_PRORTN_SUM_ID = EC.PARTCODE_PRORTN_SUM_ID 
INNER JOIN FPM_CB_LEDGER CBL ON CBL.LEDGER_ID = EC.LEDGER_ID

Если значение PP_STATUS_CD является 1097, то включают PREFIX_RSDL_PRORTDCST и если значение PF_STATUS_CD является 1097, то включают PREFIX_FRNG_RSDL_PRORTDCST и если значение PCP_STATUS_CD равно 1097, то включите PARTCODE_RSDL_PRORTDSUM, а если значение PCF_PRORTD_STATUS_CD равно 1097, то укажите PREFIX_FRNG_RSDL_PRORTDCST

Как это сделать?

1 Ответ

1 голос
/ 21 января 2020

самый простой способ - использовать CASE

например

, case 
    when PP_STATUS_CD = 1097 then
       COALESCE(PP.PREFIX_RSDL_PRORTDCST, 0) 
    else 0
  end   
  +
  case 
    when PF_STATUS_CD = 1097 then
       COALESCE(PP.PREFIX_FRNG_RSDL_PRORTDCST, 0) 
    else 0
  end
  +
  case 
    when PCP_STATUS_CD = 1097 then
       COALESCE(PCP.PARTCODE_RSDL_PRORTDSUM, 0) 
    else 0
  end
  +
  case 
    when PCF_PRORTD_STATUS_CD = 1097 then
       COALESCE(PCP.PARTCODE_FRINGE_RSDL_AMT, 0)
    else 0
  end AS TOTAL_UNBILLED_AMOUNT 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...