【问题标题】:Update table column values based on conditional logic根据条件逻辑更新表列值
【发布时间】:2023-03-03 02:52:01
【问题描述】:

我有这样的表:

name | salary 
Tom  | 10000
Mary | 20000
Jack | 30000
Lisa | 40000
Jake | 60000

我需要一个更新查询来根据其包含的值更新薪水列。

工资需要增加:

  • 5000 表示 10000 到 15000 之间的值
  • 7000 用于 15000 到 20000 之间的值
  • 8000 表示 20000 到 30000 之间的值
  • 10000 表示 40000 到 60000 之间的值

【问题讨论】:

标签: sql sql-server postgresql tsql sql-server-2008-r2


【解决方案1】:

这应该可行:

UPDATE T
SET T.Salary += CASE
        WHEN T.salary BETWEEN 10000 AND 15000 THEN 5000
        WHEN T.salary BETWEEN 15000 AND 20000 THEN 7000
        WHEN T.salary BETWEEN 20000 AND 30000 THEN 80000
        WHEN T.salary BETWEEN 40000 AND 60000 THEN 10000
        ELSE 0
    END
FROM YourTable AS T

【讨论】:

  • 问题说明增加,而不是替换。将= 更改为+= 会有所帮助,但默认值必须为0
【解决方案2】:

只需使用 UPDATE 语句和带有所需逻辑的 CASE 语句:

UPDATE SalaryTable
SET Salary = 
    (CASE WHEN Salary BETWEEN 10000 AND 14999 THEN Salary + 5000
          WHEN Salary BETWEEN 15000 AND 19999 THEN Salary + 7000
          WHEN Salary BETWEEN 20000 AND 29999 THEN Salary + 8000
          WHEN Salary BETWEEN 40000 AND 59000 THEN Salary + 10000
          ELSE Salary
     END)

我使用了BETWEEN,它评估大于或等于小于或等于,因此值类似于14999

另外,3000040000 之间有一个差距,没有发现,但我假设这是因为它是虚拟数据。

参考:

SQL BETWEEN

SQL CASE

【讨论】:

    【解决方案3】:

    尝试在UPDATE 命令中使用CASE 语句

    UPDATE
        [yourtablename]
    SET
        salary = 
             CASE 
                WHEN salary BETWEEN 10000 AND 15000 THEN salary + 5000 
                WHEN salary BETWEEN 15000 AND 20000 THEN salary + 7000 
                WHEN salary BETWEEN 20000 AND 30000 THEN salary + 8000 
                WHEN salary BETWEEN 40000 AND 60000 THEN salary + 10000 
                ELSE salary
             END 
    

    【讨论】:

      【解决方案4】:

      类似这样的:

      UPDATE YourTable
      SET salary = CASE 
                          WHEN salary > 10000 AND salary <= 15000 THEN salary + 5000
                          WHEN salary > 15000 AND salary <=20000 THEN salary + 7000
                          .
                          .
                          .
                      END
      

      【讨论】:

      • 这可以使用salary = salary + CASE 简化,不包括在每个单独的WHEN 子句中添加。或使用salary += CASE
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 2020-04-17
      • 2012-12-05
      • 2021-12-10
      • 1970-01-01
      • 2017-11-23
      • 2011-07-01
      相关资源
      最近更新 更多