这是一个棘手的问题,我一直无法理解。我正在使用 SQL Server 2008,并且我有一个如下所示的稀疏范围表:
Range Profession
----- ----------
0 Office Worker
23 Construction
54 Medical
然后我有另一个表,其中的值在这些范围内。我想构建一个连接这两个表的查询,并为我提供小于或等于给定值的 Profession 值。所以让我们说我的另一个表是这样的:
Value
29
1
60
然后我希望我的加入返回:
Value Profession
----- ----------
29 Construction
1 Office Worker
60 Medical
(因为 29> 23 用于建筑但
有没有什么办法可以让 SQL 以这种方式屈从于我的意愿,而不是实际炸毁范围表以包含所有可能的值?
谢谢你。
最佳答案
您可以使用交叉应用:
select v.Value, p.Profession
from tblValues v
cross apply
(select top(1) pr.Profession
from tblProfessionRanges pr
where pr.Range <= v.Value ORDER BY pr.[Range] DESC) p
它应该比使用 max 更快,并且不需要维护最大范围。