#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 для другого подхода..