Случай, когда несколько результатов

#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]