Ответ 1
Вы можете использовать оператор CASE
.
SELECT
CASE WHEN currate.currentrate IS NULL THEN 1 ELSE currate.currentrate END
FROM ...
У меня есть запрос, возвращающий значение обменного курса, установленное в нашей системе. Не каждый заказ будет иметь обменный курс (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
Вы можете использовать оператор CASE
.
SELECT
CASE WHEN currate.currentrate IS NULL THEN 1 ELSE currate.currentrate END
FROM ...
Вы можете использовать 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/
SELECT
ISNULL(currate.currentrate, 1)
FROM ...
менее подробный, чем выигрышный ответ, и делает то же самое
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
попробуйте, как показано ниже...
CASE
WHEN currate.currentrate is null THEN 1
ELSE currate.currentrate
END as currentrate
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