有没有办法根据 SQL 中的模式在列中填充空值?

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

我有一个由地址和社区组成的表。这里的数据集很大,包含数百万行。可能有大约 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 pattern-matching
1个回答
0
投票

是的,可以根据 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 包含更新的值。

© www.soinside.com 2019 - 2024. All rights reserved.