3

我的问题与Multiple NOT distinct非常相似,只是它处理多列而不是一列。我有一张这样的桌子:

A B C
1 1 0
1 2 1
2 1 2
2 1 3
2 2 4
2 3 5
2 3 6
3 1 7
3 3 8
3 1 9

结果应该是:

A B C
2 1 2
2 1 3
2 3 5
2 3 6
3 1 7
3 1 9

本质上,就像上面的问题一样,只有在唯一性由两列而不是一列确定的情况下,才删除所有唯一条目。我已经尝试了对上述答案的各种调整,但无法让它们中的任何一个起作用。

4

2 回答 2

3

您正在使用 SQL Server,因此这比 Access 中更容易:

select A, B, C
from (select t.*, count(*) over (partition by A, B) as cnt
      from t
     ) t
where cnt > 1;

count(*)is 作为窗口函数的这种使用。它正在计算 和 具有相同值的行AB。最后where只选择具有多个条目的行。

于 2013-07-22T23:54:34.853 回答
1

另一种可能的解决方案EXISTS

SELECT a, b, c 
  FROM Table1 t
 WHERE EXISTS 
(
  SELECT 1 
    FROM Table1
   WHERE a =  t.a 
     AND b =  t.b
     AND c <> t.c
)

它应该足够快。

输出:

| 一个 | 乙| C |
-------------
| 2 | 1 | 2 |
| 2 | 1 | 3 |
| 2 | 3 | 5 |
| 2 | 3 | 6 |
| 3 | 1 | 7 |
| 3 | 1 | 9 |

这是SQLFiddle演示

于 2013-07-23T04:29:33.837 回答