使用 SQL 清理数据 - 取列差异

问题描述

我在 SQL 中有如下数据:

实际表格

+-------------+--------+------+
|     Id      | Weight | Type |
+-------------+--------+------+
| 00011223344 |     35 | A    |
| 00011223344 |     10 | A    |
| 12311223344 |    100 | B    |
| 00034343434 |     25 | A    |
| 00034343434 |     25 | A    |
| 99934343434 |    200 | C    |
| 88855667788 |    100 | D    |
+-------------+--------+------+

ID 的长度总是 11,数据类型为 varchar。我需要从上表中创建列 Actual WeightActual ID

Actual Id 依赖于列 ID。如果 ID 以 000 开头,那么我们需要从 ID 列中找到不以 000 开头但之后的字符(即从右起 8 个字符)相似的 ID。匹配的 ID 将是 Actual Id。例如,如果我们查看前 3 个 id,则前 2 个以 000 开头,另一个不以 000 开头且包含从右起 8 个相似字符的 ID 可以在第 3 行中找到,即 12311223344因此,在派生列 Actual ID 中,前 2 行的 Actual Id12311223344

Actual Weight 取决于 2 列 IDWeight 中的值。如果对于任何不以 Id 开头但包含另一个以 Id 开头的条目的 000,我们需要根据上述条件对列 000 进行分组。然后我们需要重新计算 WeightId 不是以 000 开头的,方法是将所有以 000 开头的权重相加,并与不以{ {1}}。

例如,如果我们查看前 3 行,在第 3 行中,我们有 000Id 开头,并且具有从右起 8 位数字的条目与此相似,只是它们以 {{1} 开头} 而不是 123 (即第 1 行和第 2 行)。对于以 000 开头的情况,123 将类似于 000 但对于以 Actual Weight Weight 开头的情况将是 123

我正在寻找一个可以创建这两个派生列而无需创建任何其他表/视图的查询。

期望输出

Actual Weight

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)