【发布时间】:2018-12-06 04:34:25
【问题描述】:
我希望每个人都做得很好。我有一个我无法弄清楚的两难境地。 我正在尝试为不重复的字段找到唯一值。
例如:
表 1
|Col1 | Col2| Col3 |
| 123 | A | 1 |
| 123 | A | 2 |
| 12 | B | 1 |
| 12 | B | 2 |
| 12 | C | 3 |
| 12 | D | 4 |
| 1 | A | 1 |
| 2 | D | 1 |
| 3 | D | 1 |
Col 1 是具有重复值的字段。 Col2 将是 Col 1 中值的所有者。 Col 3 使用 row number() Over Partition 语法以升序获取数字。
我要实现的目标是删除 col 1 中的值,如果它在查看 col2 时不是真正唯一的。
例子:
Col1 的值为 123,Col2 的值为 A。虽然有两个 123 为 A 拥有的实例,但我可以确定它确实是唯一的。
现在看看 Col1 的值为 12,而 Col2 的值为 B、C、D。
值 12 与三个不同的所有者相关联,因此从我们的结果列表中删除了 12。
所以最后我希望看到这样的结果表:
|Col1 | Col2|
| 123 | A |
| 1 | A |
| 2 | D |
| 3 | D |
总而言之,我想首先使用分区号来识别 col1 中的值是否重复。从那里我想验证 col 2 中的值是否相同。如果是这样,col 1 和 col 2 中的值将保留为一个条目。但是,如果 col 2 中的值不匹配,则会删除 col1 值的所有记录。
如果需要,我将为我的查询提供语法代码。
更新**
我没有提到表 1 是内部连接两个表的结果。
所以 Col1 来自表 a,Col2 来自表 b。
表 a 中 col2 的值很难解释,所以我必须理解它们并为其分配正确的名称值。
我用来结合两者的连接查询是:
Select a.Col1, B.Col2 FROM Table a INNER JOIN Table b on a.Colx = b.Colx
更新**
表a:
|Col1 | Colx| Col3 |
| 123 | SMS | 1 |
| 123 | S9W | 2 |
| 12 | NAV | 1 |
| 12 | NFR | 2 |
| 12 | ABC | 3 |
| 12 | DEF | 4 |
| 1 | SMS | 1 |
| 2 | DEF | 1 |
| 3 | DES | 1 |
表b:
|Colx | Col2|
| SMS | A |
| S9W | A |
| DEF | D |
| DES | D |
| NAV | B |
| NFR | B |
| ABC | C |
以上是两个表的示例数据,它们为了创建显示在此正文中的第一个表而连接起来。
非常感谢大家!
【问题讨论】:
-
....如果您在连接的结果集中有重复项,几乎总是正确的方法是在连接点处或之前删除重复项。请向我们展示原始表中的数据 - 我敢打赌,您可以删除您的
tableB(可能基于colX的真实情况)。另外,您是只想显示记录,还是需要DELETE重复记录? -
@Clockwork-Muse 我更新了我的问题以反映连接的两个表。我的目标是找到唯一值,其中 col 1 仅存在于 col 2 的 1 个唯一值中。所以看看我的示例 Value 123 from col 1 有两个实例,其中 col 2 中的值为 A 所以它通过了测试并且它应该在我的结果中返回 123 的值。然而,来自 col 1 的 value 12 在 col 2 (B,C,D) 中有 3 个不同的值,这意味着 value 12 与三个不同的所有者共享相同的值。我想删除任何这样的实例。
-
啊。不,你肯定需要那里的加入。 @GordonLinoff 是正确的,
col3与查询无关。 -
@Clockwork-Muse 我最终使用了 GordonLinoff 解决方案的变体。感谢您提供链接。