запрос для возврата дополнительного столбца с некоторым условием

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

таблица: Emaployee
Столбцы: имя (nvarchar(256)), Зарплата (десятичная (18,2))

Теперь я хочу результат с дополнительным столбцом
‘Grade’=
‘A’, если зарплата<15000.00,
‘B’, если 25000.00> Зарплата>15000.00,
‘C’, если зарплата> 25000.00

Как я могу написать запрос для этого?

Ответ №1:

 SELECT name, 
       salary, 
       (CASE 
             WHEN salary<15000 THEN 'A' 
             WHEN salary>15000 AND salary <25000 THEN 'B' 
             ELSE 'C' 
       END) AS grade
FROM employee
  

Не пробовал следующее, но это тоже может сработать:

 SELECT name, 
       salary, 
       IIF (salary<15000, 'A', IIF (salary>15000 AND salary<25000, 'B', IIF (salary>25000, 'C', ))) AS grade
FROM employee
  

Комментарии:

1. возможно ли сделать то же самое с ‘IF’ вместо ‘CASE’?

2. Я добавил IF запрос к своему ответу, но я не знаю, сработает ли он. Обычно CASE предпочтительнее, чем IF

3. Неправильный синтаксис рядом с ‘<‘ .., для первого IIF я использую MS SQL server 2005

4. Извините, я не знаю, как заставить запрос работать с помощью IF или IIF .

Ответ №2:

IIF вводится в T-SQL с помощью Denali, поэтому последняя версия может работать только с версиями Denali, пожалуйста, ознакомьтесь с этим руководством по функциям IIF T-SQL

Ответ №3:

‘Grade’= ‘A’, если зарплата<15000.00, ‘B’, если 25000.00> Зарплата>15000.00, ‘C’, если зарплата>25000.00

Спецификация, похоже, ошибочна. Вам нужно вернуться к своему дизайнеру и спросить их, какой класс применяется к сотрудникам с окладами ровно 15000.00 и 25000.00 соответственно, потому что они не указаны. Ниже приведено предположение (и я не рекомендую угадывать на практике):

 SELECT name, salary, 'A' AS Grade
  FROM Employee
 WHERE Salary BETWEEN 0 AND 14999.99
UNION
SELECT name, salary, 'B' AS Grade
  FROM Employee
 WHERE Salary BETWEEN 15000.00 AND 24999.99
UNION
SELECT name, salary, 'C' AS Grade
  FROM Employee
 WHERE Salary >= 25000.00;
  

Комментарии:

1. точный результат для меня не важен, но способ его выполнения .. спецификация может быть решена позже .. 🙂 1 для другого подхода..