Coalesce эквивалент для NULL или нулевой суммы - PullRequest
0 голосов
/ 13 апреля 2020

Какой самый простой способ выбрать amountB для обоих тестовых случаев, где amountA равно нулю или 0?

DECLARE @amountA float;
DECLARE @amountB float = 3.33;
select coalesce(@amountA, @amountB)

SET @amountA  = 0.00;
select coalesce(@amountA, @amountB)

Ответы [ 4 ]

4 голосов
/ 13 апреля 2020

Для этого случая я бы использовал CASE:

select case when @amountA is null or @amountA = 0 then @amountB else @amountA end
2 голосов
/ 13 апреля 2020

Вы можете вложить case в coalesce.

select coalesce(case when @amountA > 0 then @amountA end, @amountB)

Можно также переписать как

select case when @amountA > 0 then @amountA else @amountB end

Обратите внимание, что если вы не измените приведенный выше условный оператор с> на <>, отрицательным значениям будет присвоено @ amountB

2 голосов
/ 13 апреля 2020

Вы просто ищете

DECLARE @amountA float;
DECLARE @amountB float = 3.33;
select coalesce(nullif(@amountA, 0), @amountB);

SET @amountA  = 0.00;
select coalesce(nullif(@amountA, 0), @amountB);

Или используете выражение CASE или IIF(), как я сказал в своем комментарии.

0 голосов
/ 20 апреля 2020

Я бы инвертировал условия в CASE в принятом ответе и использовал бы IIF

SELECT IIF(@amountA <> 0, @amountA, @amountB)

Если @amountA равно 0 или NULL, выражение оценивается как false или unknown соответственно, и оба они переходят к ветви ELSE.

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