通过分区查找重复项并根据SQL条件删除它们

通过分区查找重复项并根据SQL条件删除它们,sql,db2,Sql,Db2,我希望每个人都做得很好。我有一个进退两难的问题,我不能完全弄清楚。 我试图为一个不重复的字段找到一个唯一的值 例如: 表1 |Col1 | Col2| Col3 | | 123 | A | 1 | | 123 | A | 2 | | 12 | B | 1 | | 12 | B | 2 | | 12 | C | 3 | | 12 | D | 4 |

我希望每个人都做得很好。我有一个进退两难的问题,我不能完全弄清楚。 我试图为一个不重复的字段找到一个唯一的值

例如:

表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   |  
列1是具有重复值的字段。Col2将是col1中值的所有者。col3使用分区上的行数语法以升序获取数字

我试图实现的目标是删除col1中的值,如果它在查看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中的值是否重复。从这里,我想验证列2中的值是否相同。如果是,则第1列和第2列中的值保留为一个条目。但是,如果第2列中的值不匹配,将删除第1列值的所有记录

如果需要,我将提供查询的语法代码

更新**

我没有提到表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  |
上面是为了创建此正文中显示的第一个表而合并的两个表的示例数据


非常感谢大家

如果我理解正确,您希望:

select col1, min(col2)
from t
group by col1
where min(col2) <> max(col2);

我想第三栏把你弄糊涂了。它似乎在您想要的逻辑中不起任何作用。

不存在运算符可用于执行此任务:

SELECT distinct Col1 ,  Col2
FROM table t
WHERE NOT EXISTS(
  SELECT 1 FROM table t1
  WHERE t.col1=t1.col1 AND t.col2 <> t1.col2
)

col3是语法的行数分区部分。Col2实际上是另一个表b中的另一列,我使用它来连接Col1的表a。因此表a的所有者格式不同,表b将其转换为可理解的值,因此,当第2列中的值相同时,为什么第1列中的某些值将填充两次。一旦我的db2应用程序打开,我将尝试使用这种语法,并告诉您结果。我已经更新了我的问题,以反映我用于获取Col2i的语法结构。我最终使用了这种语法的变体,它完成了任务。非常感谢您的帮助,我尝试了这一点,但我得到了一个查询超时。我已经提供了一个更新,以获取我遗漏的、我认为很重要的信息……如果在连接结果集中存在重复项,那么几乎所有正确的方法都是在连接点处或之前删除重复项。请向我们展示源表中的数据-我敢打赌,您可以根据colX的实际情况对表B进行重复数据消除。另外,您是想只显示记录,还是需要删除重复的记录?@Clockwork Muse我已更新了我的问题,以反映连接的两个表。我的目标是找到唯一值,其中列1仅存在于列2的唯一值中。因此,从第1列看我的示例值123有两个实例,第2列中的值是A,因此它通过了测试,并且应该在结果中返回123的值。然而,第1列中的值12在第2列B、C、D中有3个不同的值,这意味着值12与三个不同的所有者共享相同的值。我想删除这方面的任何实例。Argh。不,你肯定需要加入那里@GordonLinoff说col3与查询无关,这是正确的。可能是@Clockwork Muse的重复,我最终使用了GordonLinoff解决方案的变体。谢谢你提供链接。