Подтвердить что ты не робот

SQL-запрос, если значение равно null, тогда верните 1

У меня есть запрос, возвращающий значение обменного курса, установленное в нашей системе. Не каждый заказ будет иметь обменный курс (currate.currentrate), поэтому он возвращает нулевые значения.

Могу ли я заставить его вернуть 1 вместо нулевого?

Возможно, что-то вроде утверждения if:

 if isnull(currate.currentrate) then 1 else currate.currentrate 

Вот мой запрос ниже. Я очень ценю вашу помощь!

 SELECT     orderhed.ordernum, orderhed.orderdate, currrate.currencycode,  currrate.currentrate
 FROM         orderhed LEFT OUTER JOIN
                  currrate ON orderhed.company = currrate.company AND orderhed.orderdate = currrate.effectivedate
4b9b3361

Ответ 1

Вы можете использовать оператор CASE.

SELECT 
    CASE WHEN currate.currentrate IS NULL THEN 1 ELSE currate.currentrate END
FROM ...

Ответ 2

Вы можете использовать COALESCE:

SELECT  orderhed.ordernum, 
    orderhed.orderdate, 
    currrate.currencycode,  
    coalesce(currrate.currentrate, 1) as currentrate
FROM orderhed 
LEFT OUTER JOIN currrate 
    ON orderhed.company = currrate.company 
    AND orderhed.orderdate = currrate.effectivedate

Или даже IsNull():

SELECT  orderhed.ordernum, 
    orderhed.orderdate, 
    currrate.currencycode,  
    IsNull(currrate.currentrate, 1) as currentrate
FROM orderhed 
LEFT OUTER JOIN currrate 
    ON orderhed.company = currrate.company 
    AND orderhed.orderdate = currrate.effectivedate

Вот статья, которая поможет решить между COALESCE и IsNull:

http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/

Ответ 4

SELECT orderhed.ordernum, orderhed.orderdate, currrate.currencycode,  

case(currrate.currentrate) when null then 1 else currrate.currentrate end

FROM orderhed LEFT OUTER JOIN currrate ON orderhed.company = currrate.company AND orderhed.orderdate = currrate.effectivedate  

Ответ 5

попробуйте, как показано ниже...

CASE 
WHEN currate.currentrate is null THEN 1
ELSE currate.currentrate
END as currentrate

Ответ 6

a) Если вы хотите 0, когда значение равно null

SELECT isnull(PartNum,0) AS PartNumber, PartID
FROM Part

b) Если вы хотите 0, когда значение равно null, а иначе 1

SELECT 
  (CASE
    WHEN PartNum IS NULL THEN 0
    ELSE 1
  END) AS PartNumber,
  PartID
FROM Part