在sql中应用动态between语句

hk8txs48  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(312)

我有两个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

我也不知道怎么做降价表。

57hvy0tb

57hvy0tb1#

这个 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) ;

这使得数据更不容易出错。

odopli94

odopli942#

你的思维过程是在正确的方向,除非你需要把'之间'子句在何处子句,而不是选择。
示例sql-

select name, salary, Paygrade from employees e join salaryband s
where e.salary between s.salarymin and s.salarymax;

相关问题