我的问题与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
基本上,与上述问题一样,仅删除所有唯一条目,其中唯一性由两列而不是一列确定。我已经尝试过对上述答案的各种调整,但无法使它们起作用。
答案 0 :(得分:2)
您正在使用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(*)
的这种用法是一个窗函数。它计算具有相同值A
和B
的行数。最终where
只选择具有多个条目的行。
答案 1 :(得分: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
)
它应该足够快。
输出:
| A | B | C | ------------- | 2 | 1 | 2 | | 2 | 1 | 3 | | 2 | 3 | 5 | | 2 | 3 | 6 | | 3 | 1 | 7 | | 3 | 1 | 9 |
这是 SQLFiddle 演示