我有两个 SQL 表。员工和薪资带。我正在使用 TSQL
员工:
Name|ID|Salary
John|1 |1000
Jack|2 |5000
Mark|3 | 0
薪资范围:
PayGrade|SalaryMin|SalaryMax
Low |0 |999
Med |1000 |4999
High |5000 |
如何在 SQL 中实现以下功能?我知道在这些值之间的情况下我将如何做到这一点,例如
Case when Salary between 0 and 1000 then 'Low' as Paygrade
。
如何加入表格并“动态”应用此转换,例如当薪资范围中的值发生变化时,我的计算也会发生变化。
输出:
Name|PayGrade|Salary
John|Med |1000
Jack|High |5000
Mark|Low |0
join
最自然地写为:
select E.Name, S.PayGrade, E.Salary
from Employees E left join
SalaryBand S
on E.Salary >= S.SalaryMin and
(E.Salary <= S.SalaryMax or S.SalaryMax is null) ;
我建议您存储较高端等于下一个起点的频段:
PayGrade|SalaryMin|SalaryMax
Low |0 |1000
Med |1000 |5000
High |5000 |
然后使用:
select E.Name, S.PayGrade, E.Salary
from Employees E left join
SalaryBand S
on E.Salary >= S.SalaryMin and
(E.Salary < S.SalaryMax or S.SalaryMax is null) ;
这使得数据更不容易出错。
您的思维过程是正确的,只是您需要将“BETWEEN”子句放在 WHERE 子句中而不是 SELECT 中。
示例 sql -
select name, salary, Paygrade from employees e join salaryband s
where e.salary between s.salarymin and s.salarymax;