Sql 根据其他字段中的结果计算新字段
我正在努力回答一个问题。我希望根据另一列的结果(例如团队),将一列(十进制8,2)的结果增加10%或20%。因此,a组为10%,b组为20%,c组为10%,等等。增加百分比所基于的字段是一个整数字段 我曾尝试使用cast来实现这一点,但后来一切都失败了,现在我很烦。想法 下面是我的基本表格示例-我正在尝试进行更多练习,这样我就不会在工作中完全无用。现在,我们希望使用SQL:Sql 根据其他字段中的结果计算新字段,sql,sql-server,ssms,sql-server-2017,Sql,Sql Server,Ssms,Sql Server 2017,我正在努力回答一个问题。我希望根据另一列的结果(例如团队),将一列(十进制8,2)的结果增加10%或20%。因此,a组为10%,b组为20%,c组为10%,等等。增加百分比所基于的字段是一个整数字段 我曾尝试使用cast来实现这一点,但后来一切都失败了,现在我很烦。想法 下面是我的基本表格示例-我正在尝试进行更多练习,这样我就不会在工作中完全无用。现在,我们希望使用SQL: select Employee_No, First_Name, Last_Name, Annual_Salary, ca
select
Employee_No,
First_Name,
Last_Name,
Annual_Salary,
case d.Department_No
when '20' then Annual_Salary+5%
when '10' then Annual_Salary+5%
when '50' then Annual_Salary+10%
when '80' then Annual_Salary+10%
when '90' then Annual_Salary+10%
when '110' then Annual_salary10+%
else Annual_Salary
end
,
Department_Name,
Department_No
from dbo.employees
您需要计算工资的分数并将其相加。在
案例中
定义正确的因子并将salaray乘以它们
SELECT employee_no,
first_name,
last_name,
annual_salary,
annual_salary
+ CASE
WHEN department_no IN ('10', '20') THEN
.05
WHEN department_no IN ('50', '80', '90', '110') THEN
.1
ELSE
0
END
* annual_salary,
department_name,
department_no
FROM dbo.employees;
想必,这就是您想要的逻辑:
select e.Employee_No, e.First_Name, e.Last_Name,e.Annual_Salary,
(Annual_Salary *
(case when e.Department_No in (10, 20) then 1.05
when e.Department_No in (80, 90, 110) then 1.10
else 1
end)
) as incremented_salary
d.Department_Name,
d.Department_No
from dbo.employees e join
dbo.departments d
on d.department_no = e.department_no;
注:
- 这假设您实际上有两个表,一个用于员工,一个用于部门。如果不是这样,只需删除
部分即可join
- 所有列引用都是限定的,因此它们指示它们来自哪个表
- 我假设部门号是一个数字,所以我删除了常数周围的单引号。如果不是这样,则保留单引号
- 这简化了计算的逻辑
- 如果这是您真正想要完成的,那么可以很容易地将其转换为更新。(问题没有明确说明这一点。)