我希望所有人都过得不错。我有一个困境,我无法弄清楚。 我试图为不重复的字段找到唯一的值。
例如:
表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使用行number()Over Partition语法获取升序的数字。
我要实现的目标是,如果在col2中不是真正唯一的值,请删除col 1中的值。
示例:
Col1的值为123,Col2的值为A。尽管A拥有123的两个实例,但我可以确定它确实是唯一的。
现在看Col1的值为12,B2,C,D的Col2中的值为。
值12与三个不同的所有者相关联,因此从结果列表中删除了12。
所以最后我想看到一个这样的结果表:
|Col1 | Col2|
| 123 | A |
| 1 | A |
| 2 | D |
| 3 | D |
总而言之,我想首先使用分区号来识别col1中的值是否重复。从那里,我想验证第2列中的值是否相同。如果是这样,col 1和col 2中的值将保留为一个单独的条目。但是,如果col 2中的值不匹配,则会删除col1值的所有记录。
如果需要,我将提供查询的语法代码。
更新**
我没有提到表1是内部联接两个表的结果。
因此,Col1来自表a,Col2来自表b。
表2中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 |
上面是两个表的样本数据,两个表被连接在一起以创建此正文中显示的第一个表。
非常感谢大家!
答案 0 :(得分:2)
NOT EXISTS运算符可用于执行此任务:
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
)
答案 1 :(得分:0)
如果我理解正确,那么您想要:
select col1, min(col2)
from t
group by col1
where min(col2) <> max(col2);
我认为第三列使您感到困惑。它似乎在您想要的逻辑中没有任何作用。