Как проверить sql поле таблицы базы данных на null или 0, и если да, заменить его другим столбцом - PullRequest
0 голосов
/ 07 мая 2020

У меня есть запрос SQL; Я хочу проверить два столбца в запросе, чтобы проверить, равны ли они нулю или нулю; если да, то я хочу заменить его другими значениями столбца.

Вот мой запрос: я использовал coalesce, чтобы проверить, имеет ли он значение null, но как я могу проверить на 0, а также как я могу заменить столбцы с другими значениями?

SELECT 
    t.Name
    ,t.Code
    ,c.Description
    ,st.APriceOld
    ,st.CPriceOld
    ,st.APriceNew
    ,st.CPriceNew
    COALESCE(st.APriceOld,st.APriceNew),
    COALESCE(st.CPriceOld,st.CPriceNew) 
FROM
    Table t
INNER JOIN
    STCP st ON st.PriceId = t.PriceId

Может ли кто-нибудь помочь мне получить ожидаемый результат?

Итак, если старые значения цен равны 0 или null, то их следует заменить новыми значениями цен

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Еще один подход - используйте функцию nullif():

SELECT 
    t.Name
    ,t.Code
    ,c.Description
    ,st.APriceOld
    ,st.CPriceOld
    ,st.APriceNew
    ,st.CPriceNew
    COALESCE(NULLIF(st.APriceOld, 0), st.APriceNew),
    COALESCE(NULLIF(st.CPriceOld, 0), st.CPriceNew) 
FROM
    Table t
INNER JOIN
    STCP st ON st.PriceId = t.PriceId
2 голосов
/ 07 мая 2020

Вы можете попробовать:

SELECT
    t.Name,
    t.Code,
    c.Description,
    st.APriceOld,
    st.CPriceOld,
    st.APriceNew,
    st.CPriceNew,
    CASE WHEN COALESCE(st.APriceOld, 0) <> 0
         THEN st.APriceOld ELSE st.APriceNew END AS APrice,
    CASE WHEN COALESCE(st.CPriceOld, 0) <> 0
         THEN st.CPriceOld ELSE st.CPriceNew END AS CPrice
FROM Table t
INNER JOIN STCP st ON st.PriceId = t.PriceId;

Лог c здесь означает использование COALESCE, чтобы сначала условно заменить NULL старое значение цены на ноль. Затем мы используем выражение CASE для замены нулевых значений (либо естественным образом равных нулю, либо сгруппированных до нуля) резервным значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...