我有一个由地址和社区组成的表。这里的数据集很大,包含数百万行。可能有大约 1300 万个包含门牌号、街道名称、邮政编码的唯一地址以及与这些地址相关的大约 50,000 个独特社区。每个社区可以有从一个地址到一千个地址的任何地方。将邻域视为一个多边形,它可以具有覆盖地图上这些地址的不同形状。
某些地址(可能是 1300 万行中的 20%)在邻域列中具有空值。问题是,有没有办法通过 SQL SELECT 查询来进行一些模式识别并填充这些空值?我没有数据库写访问权限,因此需要选择。
当前结果:
房屋号码 | 街道 | 邮编 | 邻里 |
---|---|---|---|
50 | W 任何 ST | 85092 | AA02 |
60 | W 任何 ST | 85092 | AA02 |
65 | W 任何 ST | 85092 | 空 |
72 | W 任何 ST | 85092 | 空 |
40 | W 任何 ST | 85092 | AA02 |
90 | W 任何 ST | 85092 | AA02 |
47 | W 一些 ST | 85092 | 空 |
89 | W 一些 ST | 85092 | AA02 |
39 | W 一些大道 | 85092 | 空 |
365 | W 任何 ST | 85092 | AA02 |
305 | W 小 Ln | 25345 | 空 |
365 | W 小 Ln | 25345 | XB12 |
预期结果:
房屋号码 | 街道 | 邮编 | 邻里 |
---|---|---|---|
50 | W 任何 ST | 85092 | AA02 |
60 | W 任何 ST | 85092 | AA02 |
65 | W 任何 ST | 85092 | AA02 |
72 | W 任何 ST | 85092 | AA02 |
40 | W 任何 ST | 85092 | AA02 |
90 | W 任何 ST | 85092 | AA02 |
47 | W 一些 ST | 85092 | BB04 |
89 | W 一些 ST | 85092 | BB04 |
39 | W 一些大道 | 85092 | BB04 |
90 | W 任何 ST | 85092 | AA02 |
305 | W 小 Ln | 25345 | XB12 |
365 | W 小 Ln | 25345 | XB12 |
是的,可以根据 SQL 中的模式在列中填充空值。实现此目的的一种方法是使用 CASE 语句。下面是一个示例查询,它使用这些空值下方的值填充 Mat 列中的空值:
选择垫子, CASE WHEN Mat IS NULL THEN(从 myTable 中选择前 1 个 Mat,其中 Mat IS NOT NULL 并且 Mat LIKE '12%' ORDER BY Mat DESC) 其他垫子 结束为 NewMat 来自我的表;
在此示例中,检查 Mat 列是否为空值。如果找到空值,则 CASE 语句选择与模式“12%”匹配的最上面的非空值并将其填充。如果不存在这样的值,则空值保持不变。生成的表有两列:Mat 和 NewMat,其中 NewMat 包含更新的值。