Использовать вложенный случай, когда и еще условие в хранимой процедуре - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу выполнить хранимую процедуру с 4 входными параметрами:

int A, B, C, D

и мне нужно выполнить как

A/B - C/D

, но я должен обработать Null и 0 чтобы избежать деления на ноль исключений.

Я пробовал этот подход, но это не сработало:

case when D is null or D = 0
       then case when B is null or B=0 then 0
                else cast(A/B) end
case when C is null or C=0
               case when B is null or B= 0, then 0
                else cast( A/B) end
case when A is null or A=0
               case when D is null or D= 0, then 0
                else cast(C/D) end
case when B is null or B=0
               case when D is null or D= 0, then 0
                else cast(C/D) end
else  cast (A/B - C/D) end as Result

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Хммм. , , Я предполагаю, что вы действительно хотите - C/D, если A/B не является четко определенным.

Если это так, вам вообще не нужно выражение case:

(coalesce(A / nullif(B, 0), 0) -
 coalesce(C / nullif(D, 0), 0)
) as Result
0 голосов
/ 05 мая 2020

Здесь мы также можем использовать функцию ISNULL

СЛУЧАЙ, КОГДА БУДЕТ (B, 0)> 0 THEN A / B ELSE 0 END) - (СЛУЧАЙ, КОГДА ISNULL (D, 0)> 0 THEN C / D ELSE 0 END)

...