在 SQL 中的语句之间应用动态

问题描述 投票:0回答:2

我有两个 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
sql database t-sql
2个回答
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) ;

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


0
投票

您的思维过程是正确的,只是您需要将“BETWEEN”子句放在 WHERE 子句中而不是 SELECT 中。

示例 sql -

select name, salary, Paygrade from employees e join salaryband s
where e.salary between s.salarymin and s.salarymax;
© www.soinside.com 2019 - 2024. All rights reserved.