Oracle 用case语句填充函数结果中的零值

Oracle 用case语句填充函数结果中的零值,oracle,Oracle,我在oracle中有此查询: WITH LOANS_PRINCIPAL AS (SELECT MASKAN_RATE.RATE, HRS.FN_GETREMIND_BY_DATE(PERSON_DOCK.ID,'2016/01/01') AS PRINCIPAL_DOCK FROM HRS.TBCONTINUES_PERSON_DOCK PERSON_DOCK LEFT JOIN HRS.TBMASKAN_REPAY_CATEGORY MASKAN_R

我在oracle中有此查询:

WITH LOANS_PRINCIPAL
  AS
  (SELECT 
    MASKAN_RATE.RATE,
    HRS.FN_GETREMIND_BY_DATE(PERSON_DOCK.ID,'2016/01/01') AS PRINCIPAL_DOCK
  FROM
     HRS.TBCONTINUES_PERSON_DOCK PERSON_DOCK
  LEFT JOIN HRS.TBMASKAN_REPAY_CATEGORY MASKAN_REPAY_CAT
  ON MASKAN_REPAY_CAT.ID = PERSON_DOCK.DOCK_REQUEST_DETAIL_ID
  LEFT JOIN HRS.TBFACILITY_MASKAN_RATE MASKAN_RATE
  ON MASKAN_RATE.ID = MASKAN_REPAY_CAT.FACILITY_MASKAN_RATE_ID
  LEFT JOIN HRS.TBFACILITY_MASKAN FACILITY_MASKAN
  ON FACILITY_MASKAN.ID = MASKAN_RATE.FACILITY_MASKAN_ID  
  LEFT JOIN HRS.TBPERSONNEL STAFF
  ON STAFF.ID=FACILITY_MASKAN.PERSONNEL_ID
  WHERE FACILITY_MASKAN.STATE_CODE = 7
  AND STAFF.NO=95801
  AND FACILITY_MASKAN.MASKAN_FACILITY_TYPE_CODE = 4 
  AND PERSON_DOCK.IS_CANCELED_CODE = 2 
  AND PERSON_DOCK.CANCEL_DATE IS NULL
  AND MASKAN_REPAY_CAT.FACILITY_DOCK_TYPE_CODE = 1
  AND FACILITY_MASKAN.FAMILY_ID IS NULL)
  SELECT *
  FROM LOANS_PRINCIPAL
  PIVOT (SUM (PRINCIPAL_DOCK)
  FOR RATE in (4,7,12,13,14,16,10))  
结果是:

(空)2452219979611272(空)(空)(空)(空)


我需要用零填充这个空值,更喜欢用case语句填充,而不是
选择*
(从底部的第4行),写

在大多数情况下,在双引号中使用列名不是一个好主意(因此,使用数字作为列名不是一个好主意,因为唯一的方法是使用双引号)。相反,最好在PIVOT子句中添加别名:

... for rate in (4 as rt_4, 7 as rt_7, ....)
然后

SELECT case when rt_4 is null then 0 else rt_4 end as rt_4, ....
当COALESCE做同样的事情并且更简洁时,为什么要使用CASE表达式也不清楚。(NVL也是如此,但您可能更喜欢使用SQL标准结构;NVL是Oracle的专有结构。)


谢谢,这对我很有帮助,CASE表达式只是一个想法,对于这个问题不是必需的,我使用了NVL,但不起作用
SELECT case when rt_4 is null then 0 else rt_4 end as rt_4, ....
SELECT coalesce (rt_4, 0) as rt_4, ...