#sql #sql-server
#sql #sql-сервер
Вопрос:
мне нужно реализовать оператор Case When, на мой взгляд, с множественным результатом
Как показано ниже, на мой взгляд
я пишу это, как показано ниже, но это вызывает у меня проблему (мне нужно создать диапазон значений с — Между значением и значением, а затем результат -)
Case [Total] when
between 15000 and 50000 then '2%'
when between 50001 and 75000 then '3%'
when between 75001 and 10000 then '4%'
Else '0'
End As [Case]
Но приведенный выше код не работает
Итак, я попробовал этот код, но он также не работает
Case When [Total]
between 15000 and 50000 then '2%'
between 50001 and 75000 then '3%'
between 75001 and 10000 then '4%'
Else '0'
End As [Case]
Ответ №1:
Здесь необходимо использовать длинный синтаксис CASE
:
CASE WHEN [Total] BETWEEN 15000 AND 50000 THEN '2%'
WHEN [Total] BETWEEN 50001 AND 75000 THEN '3%'
WHEN [Total] BETWEEN 75001 AND 10000 THEN '4%'
ELSE '0' END AS [Case]
Другой, сокращенный синтаксис CASE
, который вы использовали, разрешен только при сравнении столбца с определенными скалярными значениями, а не с диапазонами. Например, будет работать следующее:
CASE [Total] WHEN 15000 THEN '2%'
WHEN 50001 THEN '3%'
...
ELSE '0' END AS [Case]
Комментарии:
1. Придирка: я бы не назвал это «длинным» синтаксисом, просто «другим» синтаксисом.
CASE a WHEN b THEN ...
похоже наswitch
инструкцию, в то время какCASE WHEN a = b THEN ...
похоже наif-elseif
инструкцию. Один — это не просто более короткая версия другого, это два альтернативных синтаксиса для выполнения задачи разными способами. И «длинный»if-elseif
не всегда совпадает с «коротким»switch
, потому чтоswitch
вычисляетсяa
только один раз. — Да, в коде вы можете присвоитьa
переменной и использовать ее вif-else
, но в SQL это было бы намного более громоздким.2. Множественное число от «синтаксис» — это либо «синтаксисы», либо «синтаксисы».
3. Извините, это то, что я напечатал. но моя проверка орфографии в веб-браузере сказала использовать
'
, но вы правы .
Ответ №2:
Другой подход может быть чем-то вроде этого:
case
when [Total] > 75000
then '4%'
when [Total] > 50000
then '3%'
when [Total] >= 15000
then '2%'
else '0%'
end as [Case]