【问题标题】:Increase all employees' salaries for a classification by 5.65% percent, others by 4.93% percent将所有员工的分类工资提高 5.65%,其他提高 4.93%
【发布时间】:2016-11-10 05:48:51
【问题描述】:

我目前正在上学,我有一个个人项目需要将我选择的工作分类的所有员工增加 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 有点像,但我不知道该怎么做。

【问题讨论】:

  • 要非常小心。您可以在单个查询中多次使用同一个表,并且默认情况下,对表的每个引用都是独立的。这意味着您的子查询中对Employee 的引用将不会引用与外部查询中对Employee 的引用的same 行。这意味着您当前的查询是“如果存在 任何 从事零售工作的员工,则将 每个 员工的工资更新 5.65%”

标签: sql sql-server tsql sql-server-2016


【解决方案1】:

正如@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

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

【讨论】:

    【解决方案2】:

    研究使用 case 语句。

    基本语法是:

    UPDATE Employees
     SET Salary = CASE Classification WHEN 'Retail Sales' THEN Do 5.65% ELSE Do 4.93%
    

    您很可能需要在更新中包含一个联接才能从 Jobs 表中获取分类。

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

    【讨论】:

    • 正确逻辑加 1 ;)
    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多