SQL查询-如何在不超过一定工资限额的情况下增加员工工资

SQL查询-如何在不超过一定工资限额的情况下增加员工工资,sql,sql-server,sql-update,case,Sql,Sql Server,Sql Update,Case,我试图得到一个查询,允许我增加收入低于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

我试图得到一个查询,允许我增加收入低于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
我还使用了一个变量来增加工资,如下所示:

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
我能想到的最好的办法是使用案例陈述。我如何改进代码,使新增加的工资在2000年停止

我编写的代码如下所示:

Update @Employee
SET Salary =  CASE
WHEN Salary<2000 THEN((@SalaryIncreaseInPercentage/ 100) * Salary) + Salary
ELSE Salary
END
您可以使用最小值和值功能

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

我只想对您的原始查询做一点修改:您不想检查原始薪资是否低于2000,但如果新薪资低于2000:

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

但我不希望这些人的加薪幅度超过2000英镑——有了这个解决方案,一些员工的工资将超过2000英镑。这个半成品也可以。它做它应该做的,但同时它也修改了高于2000的工资,并将其设置为2000但我会记住这一点,以备我可能遇到的另一种情况。谢谢你^^没错,我的宝贝这工作非常好。非常感谢你。我唯一修改的是声明@IncreaseFactor Decimal 16,2=@SalaryIncreaseInPercentage,因此如果百分比不同,查询仍然有效