2017-02-08 65 views
1

我有這個查詢出來與Vet_Ben_Code列中的空值和數字。 我希望所有的NULL讀取爲0和所有其他數字保持不變,我該怎麼做。下面是該查詢:如果NULL然後0否則其他值

SELECT STU.Term_Code, 
    STU.PIDM, 
    STU.Vet, 
    RXR.Vet_Ben_Code 

FROM 
    (SELECT CST.Term_Code, 
    CST.PIDM, 
    SPB.Vet 

    FROM 
    (SELECT Term_Code, 
     PIDM 

    FROM CHELINK.Combined_Student_Table 
    WHERE Term_Code BETWEEN '201170' AND '201670' 
    )CST 
    INNER JOIN 
    (SELECT SPBPERS_PIDM, 
     SPBPERS_VETC_FILE_NUMBER Vet 

    FROM SATURN.SPBPERS 
    WHERE SPBPERS_VETC_FILE_NUMBER LIKE 'Y%' 
    OR SPBPERS_VETC_FILE_NUMBER LIKE 'y%' 
    )SPB 

    ON CST.PIDM = SPB.SPBPERS_PIDM 
)STU 

LEFT JOIN 
    (SELECT RXRVETN_Term_Code_VA AS Term_Code, 
    RXRVETN_PIDM    AS PIDM, 
    RXRVETN_Vetc_Code   AS Vet_Ben_Code 

    FROM FAISMGR.RXRVETN 
    WHERE RXRVETN_Term_Code_VA BETWEEN '201170' AND '201670' 
)RXR 

ON STU.Term_Code = RXR.Term_Code 
AND STU. PIDM  = RXR.PIDM 
+1

NVL(RXR.Vet_Ben_Code,0) – OldProgrammer

回答

1

您可以使用NVL

NVL(col, 0) 

COALESCE

COALESCE(col, 0) 
+0

謝謝你這個工作 – Cdubois6

+0

@ Cdubois6 - 很高興能幫到你。 :-) – GurV

2

您可以使用NVL()COALESCE()

SELECT NVL(NULL, 0) from dual; 
SELECT COALESCE(NULL, 0) from dual; 

NVL將返回的非空值,或者,如果它是零,然後第二個參數。

COALESCE允許多個參數,並將評估爲參數列表中的第一個非空值。

+0

請詳細說明投票結果。 – gmiley

+1

不是由設計或計劃,而我的可能已經結束了與你的類似,我描述了我的答案中的功能。我不認爲有必要對類似的答案進行倒票。通常情況下,應該保留低估票數,以防萬一不正確或者其他嚴重缺乏答案。不是由於相似性。但是無所謂。 – gmiley

+0

你以爲我不知道?無論如何,我感謝你*描述*的功能。 :-) – GurV

1

如果Oracle然後使用這個: 從雙重選擇NVL(NULL,0)

如果SQL使用這個: 從雙重選擇ISNULL(STU.Term_Code,0)

+0

爲什麼不使用標準SQL'COALESCE'而不是兩個專有函數? Oracle和SQL Server(您可能只是指* SQL *)以及幾乎所有其他DBMS都支持它。 – dnoeth

+0

好點。 !。如果您查看執行計劃,COALESCE的計劃稍微複雜一些,最明顯的是有一個額外的流聚合運算符和更多的讀取次數。如果沒有複雜的事情,那麼可能是COALESCE將等於ISNULL。 [查看此鏈接獲取更多信息](http://sqlmag.com/t-sql/coalesce-vs-isnull) –

+0

我知道SQL Server中'ISNULL'和'COALESCE'之間的區別,但是這個查詢不是複雜:-) – dnoeth

相關問題