首页 > 解决方案 > SQL查询-如何在不超过一定工资限额的情况下给员工加薪

问题描述

我正在尝试获取一个查询,该查询将允许我增加收入低于 2000 的人的工资,但我不希望这些人的工资增长高于 2000。

我正在使用的表是这样设置的:

DECLARE @Employee TABLE
(
    Id INT IDENTITY(1,1) PRIMARY KEY
   ,FirstName NVARCHAR(100)
   ,Surname NVARCHAR(100)
   ,Salary MONEY
) 
INSERT @Employee (FirstName, Surname, Salary) VALUES 
('Michael', 'Barker', 2750), ('Robert', 'Morton', 1550),
('John', 'Mitchell', 1890), ('William', 'Davison', 1840),
('James', 'Houston', 1800), ('Mark', 'Parsons', 2060),
('David', 'Higgins', 1950), ('Richard', 'Frost', 1470),
('Frank', 'Herbert', 2100), ('Brian', 'Matthews', 1930)

我还使用一个变量来增加工资,如下所示:

DECLARE @SalaryIncreaseInPercentage DECIMAL(16, 2) = 10

我能想到的最好的主意是使用CASE声明。我如何改进代码,使新增加的工资停止在 2000?

我写的代码是这样的:

Update @Employee
SET Salary =  CASE
WHEN Salary<2000 THEN((@SalaryIncreaseInPercentage/ 100) * Salary) + Salary
ELSE Salary
END

标签: sqlsql-serversql-updatecase

解决方案


您可以使用MINVALUES功能

DECLARE @IncreaseFactor DECIMAL(16, 2) = 10

UPDATE e SET e.Salary = (SELECT MIN(NewSalary) 
    FROM (VALUES (e.Salary * (1 + @IncreaseFactor/100)), (2000)) AS salaries(NewSalary))
FROM @Employee e
WHERE e.Salary < 2000

推荐阅读