2017-02-08 2 views
1

У меня есть этот запрос, который выводится с нулевыми значениями и числами в столбце Vet_Ben_Code. Я хочу, чтобы все NULL читались как 0, а все остальные числа остались прежними, как я это делаю. Вот запрос:Если NULL Then 0 Else Другое значение

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

Thank You Это сработало – 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 затем использует это: SELECT NVL (NULL, 0) от dual;

Если SQL использует это: SELECT ISNULL (STU.Term_Code, 0) из dual;

+0

Почему не стандартный SQL 'COALESCE' вместо двух собственных функций? Как Oracle, так и SQL Server (что вы, вероятно, имеете в виду только * SQL *), и почти все другие СУБД поддерживают его. – dnoeth

+0

Хорошая точка. !!!. Если вы посмотрите планы выполнения, план COALESCE немного сложнее, наиболее заметно с дополнительным оператором Stream Aggregate и большим количеством чтений. Если никакие сложные вещи, кроме COALESCE, не будут равны ISNULL. [Проверить эту ссылку для получения дополнительной информации] (http://sqlmag.com/t-sql/coalesce-vs-isnull) –

+0

Я знаю о различиях между 'ISNULL' и' COALESCE' в SQL Server, но этот запрос не является complex :-) – dnoeth

Смежные вопросы