Добавьте logi c к else в операторе case для обработки нулей - PullRequest
0 голосов
/ 01 мая 2020

Здравствуйте. Я создал запрос, который использует оператор case с подстрокой в ​​столбце данных в sql для возврата значений на основе того, что было возвращено. если ни один из данных из подстроки не соответствует тому, что я вставил, тогда я использую другое, чтобы просто отобразить данные из другого столбца. это нормально, если только оно не окажется нулевым. Есть ли способ, который я могу использовать в операторе if или что-то внутри else для обработки нулей? пример

select 
case
SUBSTRING(Name,3,3)
when 'USA' Then 'United States'
when 'CAN' Then 'Canada'
when 'AUS' Then 'Australia'
when 'BGT' Then 'Bogata'
else SiteName
end as 'Location Name'

from V_DevLocationData 

и я пытался найти способ обработки нулей в "SiteName", если инструкция case не находит совпадений. Я пытался

else (IF SiteName is Null THEN RETURN substring(Name0,3,3) ELSE RETURN SiteName END)

Не могу заставить его работать, хотя

1 Ответ

1 голос
/ 01 мая 2020

Я бы предложил:

select (case when substring(Name, 3, 3) = 'USA' Then 'United States'
             when substring(Name, 3, 3) = 'CAN' Then 'Canada'
             when substring(Name, 3, 3) = 'AUS' Then 'Australia'
             when substring(Name, 3, 3) = 'BGT' Then 'Bogata'
             when SiteName is not null then SiteName
             else substring(Name, 3, 3) 
        end) as Location_Name
from V_DevLocationData ;

Вы также можете использовать свой метод с coalesce():

select (case substring(Name, 3, 3)
             when 'USA' Then 'United States'
             when 'CAN' Then 'Canada'
             when 'AUS' Then 'Australia'
             when 'BGT' Then 'Bogata'
             else coalesce(SiteName, substring(Name, 3, 3)) 
        end) as Location_Name
from V_DevLocationData ;
...