我有一个与映射网格上的点相关的 X 和 Y 值表,其中每对值引用每个正方形的左下角,每个值以 500 平方米的增量间隔,以形成网格结构中的点。
下面是一个包含一些类似数据的表格示例,其中 XY_ID 只是 X 和 Y 值的串联。
XY_GridPointID | X_网格点 | Y_GridPoint |
---|---|---|
250000650000 | 250000 | 650000 |
250500650500 | 250500 | 650500 |
251000651000 | 251000 | 651000 |
251500651500 | 251500 | 651500 |
252000652000 | 252000 | 652000 |
252500652500 | 252500 | 652500 |
253000653000 | 253000 | 653000 |
253500653500 | 253500 | 653500 |
254000654000 | 254000 | 654000 |
254500654500 | 254500 | 654500 |
255000655000 | 255000 | 655000 |
然后我有另一个表,每一行都有一个特定的 X 和 Y 值,该值在精确到米的值方面更具体。因此,例如特定行的 X_Value 为 252996,Y_Value 为 652818。
我想要实现的是能够查找上面显示的网格表并通过 X_GridPoint 和 Y_GridPoint 拉取特定行的 X_Value 和 Y_Value 在 500m 增量范围内的位置。
因此,对于 252996 的 X_Value 和 652818 的 Y_Value,这将找到 252500 的 X_GridPoint 和 652500 的 Y_GridPoint,这是上面示例表的第 6 行。这些值基本上会“回退”到该值之前的任何 500m 网格点,并且它永远不会“向上舍入”到下一个 500m 网格点。
带有网格点的表格将包含大约 25,000 行这些组合,并希望链接到具有特定 X 和 Y 值的大型数据集,所以想知道是否有人可以建议最好的方法来解决这个问题以及什么最有效性能。任何想法将不胜感激。
使用 SQL Server 2016
您本质上想要将
X_Value
andY_Value
除以 500,截断结果,将它们乘以 500,然后将结果值与X_GridPoint
andY_GridPoint
相应地匹配。如果
X_Value
和Y_Value
是整数类型(int
,bigint
...),则所需的表达式将很简单其中截断将自动完成,因为
/
当两个操作数都是整数时执行整数除法。如果输入值是不同的类型(
float
,numeric
...),则需要一个额外的步骤:如果您只需要坐标,则实际上不需要查找表格。应用于 和 的公式
X_Value
将为Y_Value
您提供所需正方形左下角的 X 和 Y:但是,如果实际表的行包含的不仅仅是坐标,并且您需要提取该数据,那么查找查询可能如下所示: