Sql 增加所有员工';一个级别的工资下降了5.65%,其他级别的工资下降了4.93%

Sql 增加所有员工';一个级别的工资下降了5.65%,其他级别的工资下降了4.93%,sql,sql-server,tsql,sql-server-2016,Sql,Sql Server,Tsql,Sql Server 2016,我目前在上学,我有一个单独的项目,需要将我选择的职业分类的所有员工增加5.65%,其他人增加4.93%。这是我到目前为止所拥有的 UPDATE Employee SET Salary = Salary * 0.0565 WHERE EXISTS ( SELECT * FROM Employee INNER JOIN Job ON Em

我目前在上学,我有一个单独的项目,需要将我选择的职业分类的所有员工增加5.65%,其他人增加4.93%。这是我到目前为止所拥有的

UPDATE Employee 
 SET Salary = Salary * 0.0565
WHERE EXISTS (
               SELECT * 
                 FROM Employee
                      INNER JOIN Job
                         ON Employee.Job_ID = job.Job_ID
                            AND job.Job_Classification = 'Retail Sales'
                WHERE Job.Job_ID = Employee.Job_ID
              );


我的问题是,有没有一种方法可以让每个人都增加5.65%,让同一脚本中的其他人都增加?我觉得这是一个
IF-THEN-ELSE
类的东西,但我不知道怎么做

研究如何使用case语句

基本语法是:

UPDATE Employees
 SET Salary = CASE Classification WHEN 'Retail Sales' THEN Do 5.65% ELSE Do 4.93%
您很可能需要在更新中包含联接,才能从Jobs表中获取分类


上面的语法不正确,但应该为您提供足够的方向,以便进一步使用case语句

基本语法是:

UPDATE Employees
 SET Salary = CASE Classification WHEN 'Retail Sales' THEN Do 5.65% ELSE Do 4.93%
您很可能需要在更新中包含联接,才能从Jobs表中获取分类


上面的语法不正确,但应该给你足够的方向,让你更进一步,

正如@Christopher Trevor所说,应该是这样的:

UPDATE e 
  SET e.Salary = 
        case when job.Job_Classification = 'Retail Sales' 
             then e.Salary * 0.0565 
             else e.Salary * 0.0493 
         end
from Employee e
inner join Job job on job.Job_ID = e.Job_ID

我没有对此进行测试,因为您没有发布表的架构。但它应该为你指明正确的方向

正如@Christopher Trevor所说,应该是这样的:

UPDATE e 
  SET e.Salary = 
        case when job.Job_Classification = 'Retail Sales' 
             then e.Salary * 0.0565 
             else e.Salary * 0.0493 
         end
from Employee e
inner join Job job on job.Job_ID = e.Job_ID

我没有对此进行测试,因为您没有发布表的架构。但它应该为你指明正确的方向

小心点。可以在单个查询中多次使用同一个表,默认情况下,对该表的每个引用都是独立的。这意味着子查询中对
Employee
的引用将不会引用与外部查询中对
Employee
的引用相同的行。也就是说,您当前的查询是“如果有任何在零售业工作的员工,请将每个员工的工资更新5.65%”,请非常小心。可以在单个查询中多次使用同一个表,默认情况下,对该表的每个引用都是独立的。这意味着子查询中对
Employee
的引用将不会引用与外部查询中对
Employee
的引用相同的行。这意味着您当前的查询是“如果存在任何在零售业工作的员工,则将每个员工的工资更新5.65%”加上1以获得正确的逻辑;)加1表示逻辑正确;)