2017-02-18 5 views
2

ich habe diese Abfrage in Oracle:füllt Nullwert von Funktionsergebnis mit Case-Anweisung

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)) 

und Ergebnis ist:

(null) 245.221.991 97.611.272 (null) (null) (null) (null)

ich brauche mit Null diesen Null-Wert zu füllen, es vorziehen, mit Case-Anweisung

Antwort

0

Statt SELECT * (Linie 4 von unten) ausfüllen, schreiben

012.351.

In den meisten Fällen ist es keine gute Idee, Spaltennamen in Anführungszeichen zu verwenden (daher ist es keine gute Idee, Zahlen als Spaltennamen zu verwenden, da Sie dies nur durch doppelte Eingabe tun können -quoting sie). Vielmehr ist es besser, Aliase in der PIVOT-Klausel hinzuzufügen:

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

und dann

SELECT case when rt_4 is null then 0 else rt_4 end as rt_4, .... 

Es ist auch unklar, warum Sie CASE-Ausdrücke verwenden möchten, wenn COALESCE die gleiche Sache tut und ist mehr prägnant. (Das Gleiche gilt für NVL aber vielleicht doch lieber SQL-Standard-Konstrukte verwenden;. NVL proprietäre Oracle ist)

SELECT coalesce (rt_4, 0) as rt_4, ... 
+0

danke, das ist für mich sehr hilfreich, CASE-Ausdrücke nur eine Idee und nicht notwendig für dieses Problem, i NVL verwendet, funktioniert aber nicht –