这是一个棘手的问题,我一直无法理解。我正在使用 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 更快,并且不需要维护最大范围。

10-08 03:20